Java KeyBindingApi。我不知道

Java KeyBindingApi。我不知道,java,enter,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(KeySt

当按下按钮上的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,所以inputmap知道使用字符串ENTER的击键,但是如果我在这里使用lieke,它就不起作用了。逃跑很有效,但进入不起作用。如果我把这个丢给char做

        im.put(KeyStroke.getKeyStroke((char) KeyEvent.VK_ENTER),"enter");
        im.put(KeyStroke.getKeyStroke("released ENTER"),"enter released");

然后它就起作用了。但是我觉得这很难看,我不想投下这个,因为我认为通常“回车”应该能起作用。

问题是,这是大量的文档记录,
keylister
是不可靠的

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

添加诸如
JButton
之类的组件会将键盘焦点从您的组件移开,并将其交给其他组件,因此
keylister
停止工作

有很多“变通方法”,但坦率地说,它们是不可靠的,本质上只是黑客


您最好使用,它解决了
KeyListener
的缺点,并提供了一个更可重用、更灵活的API

请阅读我尝试的mhhh。见下面我的答案