Java JSlider:can';在拖动过程中,不要使旋钮在最近的刻度上移动

Java JSlider:can';在拖动过程中,不要使旋钮在最近的刻度上移动,java,swing,jslider,Java,Swing,Jslider,正如标题中所解释的,我制作了一个简单的JSlider,我成功地设置了一个最小值和最大值,以及一个较小的刻度间距,然后我将“setSnapToTicks”设置为true。这部分没问题,当用户释放鼠标时,我的旋钮会在最近的滴答声上移动,这再简单不过了 但是现在我想在不释放鼠标的情况下获得这种效果,旋钮必须一点一点地移动,而不注意那些刻度之间的值,我希望它只在刻度值上“跳跃”。我只是做了很多搜索,但没有找到答案,我只是听说了“setExtent”,它应该设置我正在搜索的步骤,但经过一些调试后,它不起作

正如标题中所解释的,我制作了一个简单的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);
    JSlider s = new JSlider();
    s.setUI(new MetalSnapSliderUI());

感谢阅读,我希望我能得到一些帮助:)

我认为这种行为是由组件的UI委托控制的(
SliderUI
)。您可以尝试其他外观,也可以尝试配置您使用的外观

您还可以在组件上安装另一个UI委托

看这个

编辑

我想出了一个丑陋的黑客来做这项工作。此代码完全依赖于类
BasicSliderUI
(大多数外观使用)的实现细节

您需要在JSlider上安装此UI:

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);
    JSlider s = new JSlider();
    s.setUI(new MetalSnapSliderUI());

正如我在回答中提到的,捕捉行为当然取决于您使用的外观和感觉。你能告诉我们你用的是哪一个吗?它看起来像你贴的链接上的金属核心。这就是你需要知道的?(很抱歉,我正在处理一个现有的大项目,我没有处理所有已经在中开发的图形规范)是的,这是我需要的信息。这是有道理的,因为金属是默认的(但不幸的是很难看!)外观。问题是我现在不允许修改这种外观,但我仍在网上搜索并阅读你的链接,谢谢你的帮助,我会发布我的发现;)我测试了Nimbus、Metal、Motif和Gtk的外观和手感。他们的行为都一样。在我看来,您唯一的选择将是剪切UI委托(或找到一个聪明的黑客)。