KeyBindingApi。输入不知道

时间:2018-05-14 21:11:46

标签: java enter

按下按钮上的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”应该可以工作。

1 个答案:

答案 0 :(得分:1)

问题是,并且记录很多,KeyListener不可靠。

为了KeyListener工作,它注册的组件必须是可聚焦的并具有键盘焦点。

添加JButton之类的组件会将键盘焦点移离组件并将其交给其他组件,因此KeyListener停止工作。

有许多"解决方案"但坦率地说,它们不可靠,基本上只是黑客攻击。

您最好使用Key Bindings API来解决KeyListener的缺点,并提供更加可重复使用且更灵活的API