【发布时间】:2018-03-31 19:46:16
【问题描述】:
我正在尝试为 JSlider 中的左右箭头键实现我自己的逻辑。 默认情况下,JSlider 根据左右箭头左右移动滑块。我可以阻止它移动滑块的唯一方法是将 setFocusable 设置为 false,但这会阻止我的 addKeyListener 工作。有没有办法覆盖或关闭这个默认操作,所以我的 addKeyListener 是唯一响应关键事件的方法?
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class slider {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Slider Test");
JSlider slider = new JSlider();
slider.setToolTipText("Slide the time.");
slider.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
slider.setOpaque(false);
slider.setPaintTrack(true);
slider.setPaintTicks(true);
slider.setPaintLabels(false);
slider.setMinimum(0);
slider.setMaximum(100);
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);
slider.setOrientation(JSlider.HORIZONTAL);
slider.setSnapToTicks(false);
slider.setFocusable(true);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("I have changed :(");
}
});
slider.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
// right arrow
if(keyCode == 39) {
System.out.println("do right arrow key logic");
}
// left arrow
if(keyCode == 37) {
System.out.println("do left arrow key logic");
}
}
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(slider);
frame.pack();
frame.setVisible(true);
}
}
【问题讨论】: