[英]Set JSlider limits
I have a JSlider that goes from min
to max
values. 我有一个从min
到max
的JSlider。 I want to set a range limit for slider movements. 我想为滑块移动设置范围限制。
Ie I want to put slider limits from -90 to 90, but I want to move the slider only between -45 and 60. In this case the slider does not reach limits but it's blocked before reaching it. 即,我想将滑块限制从-90到90,但我只想在-45到60之间移动滑块。在这种情况下,滑块没有达到限制,但是在到达之前被阻塞。
How can I obtain this result? 如何获得此结果?
import java.awt.BorderLayout;
import javax.swing.BoundedRangeModel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TickSlidersSnapToTicks {
public static void main(String args[]) {
JFrame frame = new JFrame("Tick Slider");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSlider slider = new JSlider(-90, 90, 0);
// Major Tick 25 - Minor 5
jSliderOne.setMinorTickSpacing(5);
jSliderOne.setMajorTickSpacing(25);
jSliderOne.setPaintTicks(true);
// I want to put here slider block limits
// ...
frame.add(jSliderOne, BorderLayout.NORTH);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
This solution works (note the trick to let the slider think that the user released the mouse): 此解决方案有效(请注意使滑块认为用户释放了鼠标的技巧):
public class InnerSlider extends JSlider {
int innerMin, innerMax;
public InnerSlider(int min, int max, int innerMin, int innerMax){
super(min,max);
this.innerMin = innerMin;
this.innerMax= innerMax;
addChangeListener((e) -> {
if(getValue() < innerMin){
setValue(innerMin);
getMouseListeners()[0].mouseReleased(null);
}else if(getValue() > innerMax){
setValue(innerMax);
getMouseListeners()[0].mouseReleased(null);
}
});
}
}
There is quick dirty way to do this,but this violate some design principles like LSP. 有一种快速的肮脏的方法来执行此操作,但这违反了LSP等某些设计原则。
JSlider jSliderOne = new JSlider();
// Major Tick 25 - Minor 5
jSliderOne.setMinorTickSpacing(5);
jSliderOne.setMajorTickSpacing(25);
jSliderOne.setPaintTicks(true);
jSliderOne.setModel(new DefaultBoundedRangeModel()
{
@Override
public void setValue(int n)
{
if (n > 50)
{
n = 50;
}
else if (n < -45)
{
n = -45;
}
super.setValue(n);
}
}
);
in this solution, if user tries to drag the thumb system will allow to go beyond the limit, but once user release the mouse it will set to limit. 在此解决方案中,如果用户尝试拖动拇指系统,则允许超出限制,但是一旦用户释放鼠标,它将设置为限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.