按下按钮上的Enter键时,我尝试执行操作。
System.out.println(KeyStroke.getKeyStroke("ENTER").getKeyCode());
im.put(KeyStroke.getKeyStroke("ESCAPE"),"esc");
im.put(KeyStroke.getKeyStroke("released ESCAPE"),"esc released");
im.put(KeyStroke.getKeyStroke("ENTER"),"enter");
im.put(KeyStroke.getKeyStroke("released ENTER"),"enter released");
我不知道为什么,但是 sysout得到了10,所以输入映射知道键输入的键击,但是如果我把它放在这里它不起作用。 ESCAPE工作得很好,但是ENTER没有用。如果我将其转换为char并制作
im.put(KeyStroke.getKeyStroke((char) KeyEvent.VK_ENTER),"enter");
im.put(KeyStroke.getKeyStroke("released ENTER"),"enter released");
然后它有效。但是我觉得这很难看,我不想这样做,因为通常“Enter”应该可以工作。
答案 0 :(得分:1)
问题是,并且记录很多,KeyListener
不可靠。
为了KeyListener
工作,它注册的组件必须是可聚焦的并具有键盘焦点。
添加JButton
之类的组件会将键盘焦点移离组件并将其交给其他组件,因此KeyListener
停止工作。
有许多"解决方案"但坦率地说,它们不可靠,基本上只是黑客攻击。
您最好使用Key Bindings API来解决KeyListener
的缺点,并提供更加可重复使用且更灵活的API