正如标题中所解释的那样,我制作了一个简单的JSlider,并且我成功设置了最小值和最大值,以及一个小的节距,然后我将"setSnapToTicks"设置为true.没有问题,当用户松开鼠标时,我的旋钮移动到最近的刻度线上,这样就不容易了.
但是现在我想要在没有释放鼠标的情况下获得此效果,旋钮必须按刻度移动而不关注这些刻度之间的值,我希望它仅在刻度值上"跳跃".我刚做了很多搜索,我没有找到答案,我只是关于"setExtent",它应该设置我正在搜索的那一步,但是在调试之后它没有用.这是我对JSlider的简单声明:
sliderFlightLevel = new JSlider();
sliderFlightLevel.setValue(100);
sliderFlightLevel.setMinorTickSpacing(100);
sliderFlightLevel.setMinimum(100);
sliderFlightLevel.setMaximum(50000);
GridBagConstraints gbcSliderFlightLevel = new GridBagConstraints();
gbcSliderFlightLevel.gridwidth = 3;
gbcSliderFlightLevel.insets = new Insets(0, 10, 5, 10);
gbcSliderFlightLevel.fill = GridBagConstraints.HORIZONTAL;
gbcSliderFlightLevel.gridx = 0;
gbcSliderFlightLevel.gridy = 1;
mainPanel.add(sliderFlightLevel, gbcSliderFlightLevel);
Run Code Online (Sandbox Code Playgroud)
感谢阅读,我希望我会得到一些帮助:)
我认为这种行为是由组件的 UI 委托 ( SliderUI) 控制的。您可以尝试另一种外观和感觉,也可以尝试配置您使用的外观和感觉。
您还可以在组件上安装另一个 UI 委托。
请参阅这个自定义 swing 组件行为的真实示例。
编辑
我想出了一个丑陋的技巧来完成这项工作。该代码完全依赖于类的实现细节BasicSliderUI(大多数外观和感觉都使用该类)。
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JSlider;
import javax.swing.plaf.metal.MetalSliderUI;
public class MetalSnapSliderUI extends MetalSliderUI {
private MouseMotionListener myMouseMotionListener = new MouseMotionListener() {
public void mouseDragged(MouseEvent e) {
trackListener.mouseDragged(e);
calculateThumbLocation();
slider.repaint();
}
public void mouseMoved(MouseEvent e) {
trackListener.mouseMoved(e);
}
};
@Override
protected void installListeners(JSlider slider) {
super.installListeners(slider);
slider.removeMouseMotionListener(trackListener);
slider.addMouseMotionListener(myMouseMotionListener);
}
@Override
protected void uninstallListeners(JSlider slider) {
super.uninstallListeners(slider);
slider.removeMouseMotionListener(myMouseMotionListener);
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在 JSlider 上安装此 UI:
JSlider s = new JSlider();
s.setUI(new MetalSnapSliderUI());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |