Java 在何处添加KeyListener以';始终';在听
我需要一个Java 在何处添加KeyListener以';始终';在听,java,swing,jpanel,keylistener,Java,Swing,Jpanel,Keylistener,我需要一个keysister始终“监听”要按下的退出键,然后退出程序 我试过输入addKeyListener(这个)在我的主构造函数中(绘制面板的构造函数),并已使用 public void keyPressed( KeyEvent e) { int code = e.getKeyCode(); if(code == KeyEvent.VK_ESCAPE) { System.exit( 0 ); } } 我没有收到任何
keysister
始终“监听”要按下的退出键,然后退出程序
我试过输入addKeyListener(这个)代码>在我的主构造函数中(绘制面板的构造函数),并已使用
public void keyPressed( KeyEvent e)
{
int code = e.getKeyCode();
if(code == KeyEvent.VK_ESCAPE)
{
System.exit( 0 );
}
}
我没有收到任何错误,但按escape键似乎没有任何作用,有什么建议吗?
- 默认情况下,从不接收来自的
KeyEvent
,但可能有几行代码、错误的想法、错误的侦听器
- 通过对
KeyEvent
进行诽谤性反应,但仅在可聚焦的情况下,才是聚焦所有者
,错误的想法,错误的听众(例如),因为您需要以编程方式将聚焦
从JTextField
移动到JPanel
,这是错误的想法
- 添加到
JFrame
/JDialog
/JWindow
,默认情况下可用于Swing JComponent
,而不用于AWT组件
在Swing中有一个顶层面板:允许在顶层处理事件的GlassPane(以避免其他小部件消耗事件)您可以使用InputMap/ActionMap机制:
Object escapeActionKey = new Object();
pnl.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), escapeActionKey);
pnl.getActionMap().put(escapeActionKey, new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.err.println("escape 1");
}
});
JComponent.WHEN_IN_FOCUSED_WINDOW
表示当pnl
组件在聚焦窗口中时,此按键可用
也可以添加全局AWTEventListener侦听器:
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
public void eventDispatched(AWTEvent event) {
if(event.getID() == KeyEvent.KEY_PRESSED) {
KeyEvent kEvent = (KeyEvent) event;
boolean isEsc = (kEvent.getKeyCode() == KeyEvent.VK_ESCAPE);
if(isEsc) {
System.err.println("escape 2");
}
}
}
}, AWTEvent.KEY_EVENT_MASK);
可能的重复项不使用KeyListener,而是使用KeyBinding。这将避免您所描述的问题。如何将侦听器添加到GlassPane?我得到了“找不到符号”这有能力消耗所有事件,这意味着其他组件都不能对它们做出反应感谢您的帮助,我使用requestFocusInWindow()将焦点设置到面板上;并将keylistner直接分配给面板HMMMM请参见@camickr提供的clear,simple