在java中,当选项卡显示在TextField中时,在TextArea中显示消息

在java中,当选项卡显示在TextField中时,在TextArea中显示消息,java,Java,下面的代码应该让程序在某个JTextField(称为timeStep)中按下tab键时进行检测,并在TextArea(称为textareainstructions)中显示消息,但它似乎不起作用。谁能告诉我为什么 timeStep.setFocusTraversalKeys( KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET); timeStep.addKeyLis

下面的代码应该让程序在某个JTextField(称为timeStep)中按下tab键时进行检测,并在TextArea(称为textareainstructions)中显示消息,但它似乎不起作用。谁能告诉我为什么

timeStep.setFocusTraversalKeys(
                KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);

        timeStep.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                if(evt.getKeyCode() == KeyEvent.VK_TAB){
                    instruction = "Enter a real number time step";
                    textAreaInstructions.setText(instruction);
                    /* If you want to change the focus to the next component */
                    //nextJComponent.grabFocus();
            }
            }
        });

TAB键已经被大多数swing组件占用,因为它与field focus控件绑定。处理方法不止一种,您可以尝试其他方法:

您可以使用FocusListener简单地检测焦点何时离开文本字段,而不是显式地侦听TAB键


注册一个键盘动作:JComponent.registerKeyboardAction(动作,击键,当在聚焦窗口中时);对于TAB键。

我曾想过尝试您的第一个建议,但我想知道如何使按下TAB键成为更改显示指令的唯一方式。Java有一个奇妙的东西,叫做Javadoc:。两件事:java中的过时意味着我们决定添加另一个API,我们更希望您使用它(因为我们在前三次尝试中就把API设计搞砸了…)。到目前为止,还没有从公共API中删除任何方法(Java因此被昵称为“新Cobol”)。当提到另一种方法时——Javadoc链接过多——请遵循指向另一种方法的链接。如果签名没有立即意义,请阅读详细信息并导航到类型描述(例如InputMap),还有一个类描述将描述使用。。。。您将发现InputMap将击键映射到动作键。顺便说一句,我会使用注册表键盘操作。它的工作量要小得多。你走的很好。以一种自动指示的方式解决这样的问题似乎很乏味,但您将学到更多(教程中有一个简单的3行代码:)