我有一个JSlider的0最小值及100最大值当JSlider的第一次启动,则该值为0JSlider的 - 击可以点去朝那个方向
现在,当我点击我的鼠标在50,甚至20或100,JSlider不会移动到我点击的位置。它只是向右跳一点点。
我该如何做到这一点,以便我点击任何东西时的价值?
我有一个JSlider的0最小值及100最大值当JSlider的第一次启动,则该值为0JSlider的 - 击可以点去朝那个方向
现在,当我点击我的鼠标在50,甚至20或100,JSlider不会移动到我点击的位置。它只是向右跳一点点。
我该如何做到这一点,以便我点击任何东西时的价值?
这是一个能够满足你需要的类的开始。
总的想法是检测用户点击的位置并计算必要的值偏移以匹配新的滑块位置。
// 'E' stands for enhanced
public class EJSlider extends JSlider {
public EJSlider() {
super();
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
double percent = p.x/((double) getWidth());
int range = getMaximum() - getMinimum();
double newVal = range * percent;
int result = (int)(getMinimum() + newVal);
setValue(result);
}
});
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new EJSlider());
f.pack();
f.setVisible(true);
}
}
只需运行该示例。滑块将跳到您点击鼠标的任何位置。这尚未经过彻底测试,但不适用于垂直滑块。
这个类似的解决方案将简单地将我的自定义MouseListener
添加到任何JSlider
你想要的功能。
(注意,我知道它还不完美,但它是一个很好的开始。)
为什么要实现非标准行为?潜在的混淆你的用户..保持鼠标按下,拇指将最终到达鼠标 – kleopatra