Вот начало класса, который будет делать то, что вам нужно.
Общая идея состоит в том, чтобы определить, где пользователь нажимает кнопку, и рассчитать смещение значения, необходимое для соответствия этому новому положению ползунка.
// '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
, для которого вы хотите эту функцию.
(Обратите внимание, я знаю, что это еще не идеально, но это хорошее начало.)