针对JFrame的无响应的KeyListener我正在尝试实现一个KeyListener为了我JFrame..在构造函数上,我使用以下代码:System.out.println("test");addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) { System.out.println( "tester"); }
public void keyReleased(KeyEvent e) { System.out.println("2test2"); }
public void keyTyped(KeyEvent e) { System.out.println("3test3"); }});当我运行它时,test信息出现在我的控制台里。但是,当我按下一个键时,我不会收到任何其他消息,就好像KeyListener甚至都不在那里。我在想这可能是因为焦点不在JFrame所以他们KeyListener不会收到任何事件。但是,我很确定。我遗漏了什么吗?
3 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
myComponent.addKeyListener(new KeyListener ...);
myComponent.setFocusable(true);
手掌心
TA贡献1942条经验 获得超3个赞
KeyEventDispatcherKeyboardFocusManager:
public class MyFrame extends JFrame {
private class MyDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
System.out.println("tester");
} else if (e.getID() == KeyEvent.KEY_RELEASED) {
System.out.println("2test2");
} else if (e.getID() == KeyEvent.KEY_TYPED) {
System.out.println("3test3");
}
return false;
}
}
public MyFrame() {
add(new JTextField());
System.out.println("test");
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher(new MyDispatcher());
}
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.pack();
f.setVisible(true);
}}
Smart猫小萌
TA贡献1911条经验 获得超7个赞
InputMap inputMap; ActionMap actionMap;AbstractAction action;JComponent component;
inputMap = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);actionMap = component.getActionMap();
action = new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e)
{
dispose();
}};inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "dispose");actionMap.put("dispose", action);添加回答
举报
0/150
提交
取消
