1

我有一个 JTextField,上面挂着一个 KeyListener。在 keyPressed 内部,我检查是否输入了被按下的键。在此之后,我想在内部类中调用不同的事件处理程序(内部类只包含这个处理程序)。

这就是我所拥有的,但显然: new handler() 似乎没有启动内部类处理程序。

关键事件处理程序:

public void keyPressed(KeyEvent k) {
    if(k.getKeyCode()==KeyEvent.VK_ENTER){
         new handler();
    }
}

内部类事件处理程序:

public class handler implements ActionListener{
public void actionPerformed(ActionEvent e) {
    int red = Integer.parseInt(roodT.getText());
    int groen = Integer.parseInt(groenT.getText());
    int blauw = Integer.parseInt(blauwT.getText());
    if(red>255){
        red = 255;
    } else if (red < 0){
        red = 0;
    }
    if(groen>255){
        groen = 255;
    } else if (groen < 0){
        groen = 0;
    }
    if(blauw>255){
        blauw = 255;
    } else if (blauw < 0){
        blauw = 0;
    }
    inhoud.setBackground(new Color(red, groen, blauw));
}

}

这是我第一次在这里发帖,如果这个问题的格式不正确,很抱歉。

4

3 回答 3

2

只需将ActionListener直接附加到JTextField. 按下 ENTER 时将触发。这是JTextField.

供进一步参考:

  • 不要将 a 附加KeyListenerJTextComponent. 使用DocumentListener和/或DocumentFilter
  • 你应该习惯于(new handler()).actionPerformed( new ActionEvent( ... ) );让你的代码“工作”
于 2013-06-04T09:03:09.163 回答
2

对于 aJTextField您可以直接将您的添加handler到其中:

JTextField someField = new JTextField(20);
someField.addActionListener(new handler());

ActionListener按下时自动触发ENTER

对于所有JTextComponent,而不是使用KeyListener,使用DocumentListenerDocumentFilter

用于其他JComponent用途Swing KeyBindings

在所有情况下,远离KeyListener哪个是低级 API。

于 2013-06-04T09:04:42.393 回答
-2
public void keyPressed(KeyEvent k) {
    if(k.getKeyCode()==KeyEvent.VK_ENTER){
         new handler().**actionPerformed(k)**;
    }
}

你忘了调用 actionPerformed。

于 2013-06-04T09:20:12.247 回答