[英]Java JSlider implementing own logic for left and right arrow keys
我正在嘗試為 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);
}
}
不要使用 KeyListener。
Swing 旨在與鍵綁定一起使用。 如果您不喜歡給定鍵綁定的默認操作,則可以替換該操作。
查看Key Bindings以獲取更多信息,這些信息顯示給定組件的默認綁定以及如何替換右/左 KeyStroke 的 Action。
通過替換現有綁定的Action
來更改現有功能的基礎是:
Action action = new AbstractAction() {...};
KeyStroke keyStroke = KeyStroke.getKeyStroke(...);
InputMap im = component.getInputMap(...);
component.getActionMap().put(im.get(keyStroke), action);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.