我在我的应用程序中使用了 JSlider
。我只想左键单击滑动 JSlider
,我想禁用 JSlider
的右键单击。我可以通过右键单击获得事件,但 slider 正在将其值更改为其他位置。
jSlider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
//code
}
});
jSlider.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.getButton() == java.awt.event.MouseEvent.BUTTON3) {
//code
} else {
//code
}
}
});
最佳答案
我使用的是 JDK1.7.0_03,Windows 7
UIManager.put("Slider.onlyLeftMouseButtonDrag", Boolean.TRUE);
JDK1.6.0_31:
Bug ID: 6614972 JSlider value should not change on right-click
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.metal.MetalSliderUI;
public class SliderOnlyLeftMouseButtonDragTest {
public JComponent makeUI() {
JSlider slider00 = new JSlider(0,10,5);
JSlider slider01 = new JSlider(0,10,5);
slider01.setUI(new MetalSliderUI() {
protected TrackListener createTrackListener(JSlider slider) {
return new TrackListener() {
@Override public void mousePressed(MouseEvent e) {
if(!SwingUtilities.isLeftMouseButton(e)) {
return;
}
super.mousePressed(e);
}
};
}
});
JPanel p = new JPanel();
p.add(slider00);
p.add(slider01);
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new SliderOnlyLeftMouseButtonDragTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
关于java - 如何在鼠标右键单击时禁用 JSlider 的位置更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736237/