【发布时间】:2013-08-01 03:45:05
【问题描述】:
我正在尝试在 JPanel 上使用 Java 进行键绑定。当我按下“w”按钮时,我希望执行某个操作。我按照 Java 教程进行绑定,但 actionPerformed 方法没有执行(即没有文本打印出来)。以下是我的测试 GUI 的全部代码,相关部分突出显示:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
@SuppressWarnings("serial")
public class Test extends JFrame{
private JPanel panel;
public Test(){
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,500);
setLayout(new BorderLayout());
setVisible(true);
panel = new JPanel();
// HERE ARE THE KEY BINDINGS
panel.getInputMap().put(KeyStroke.getKeyStroke('w'),"forward");
panel.getActionMap().put("forward", new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e){
System.out.println("test");
}
});
// END OF KEY BINDINGS
add(panel, BorderLayout.CENTER);
}
public static void main(String[] args){
new Test();
}
}
永远不会打印文本“test”。我已经多次尝试使用许多不同的变体、不同的键,并且我确保面板处于焦点位置,但没有运气。我究竟做错了什么?
【问题讨论】:
标签: java swing input key-bindings onfocus