【发布时间】:2023-03-27 15:40:01
【问题描述】:
我以前使用过 Java 的 KeyListener,但随着我的程序要求更多,我得到了切换到 KeyBinds 的建议。
首先,我尝试向 JFrame 添加键绑定但不起作用(我不明白我需要使用什么 JComponent。)。因此,我尝试将程序移到 JPanel,然后将其添加到 JFrame,但是当按下所需的按钮(在本例中为“1”按钮)时,键绑定没有反应;
在方法调用中,我将操作设置为 Print "Hi"。代码如下:
public class Panel extends javax.swing.JPanel {
JPanel Panel = new JPanel();
/**
* Creates new form Panel
*/
public Panel() {
addKeyBinding(Panel, KeyEvent.VK_1, "1Button", (evt)->{
System.out.println("Hi");
});
initComponents();
}
..... 这是方法 .....
public static void addKeyBinding(JComponent comp, int keyCode, String id, ActionListener actionListener){
InputMap im = comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap ap = comp.getActionMap();
im.put(KeyStroke.getKeyStroke(keyCode, 0, false),
id);
ap.put(id, new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
actionListener.actionPerformed(e);
}
});
}
我做错了什么?谢谢!
【问题讨论】:
-
可以在评论中发布您的完整代码。巴斯宾?
-
我尝试将键绑定添加到不起作用的 JFrame - 对于全局级别绑定,您将键绑定添加到框架的根窗格。使用 JFrame 的
getRootPane()方法。 -
那我做
[Frame Name].getRootPane()?因为这不起作用...
标签: java swing key-bindings jcomponent