【问题标题】:How to trigger inner class event handler inside an event handler (JAVA)如何在事件处理程序(JAVA)中触发内部类事件处理程序
【发布时间】:2013-05-30 14:27:28
【问题描述】:

我有一个 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));
}

}

这是我第一次在这里发帖,如果这个问题的格式不正确,请见谅。

【问题讨论】:

  • 欢迎来到 SO。你的问题格式很好,而且+问得很好,+1 :)

标签: java swing actionlistener jtextfield keylistener


【解决方案1】:

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

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

ActionListener 会在ENTER 按下时自动触发。

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

对于其他JComponent,请使用Swing KeyBindings

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

【讨论】:

    【解决方案2】:

    只需将ActionListener 直接附加到JTextField。按下 ENTER 时将触发。这是JTextField 的内置行为。

    进一步参考:

    • 不要将KeyListener 附加到JTextComponent。使用DocumentListener 和/或DocumentFilter
    • 您应该使用(new handler()).actionPerformed( new ActionEvent( ... ) ); 使您的代码“工作”

    【讨论】:

      【解决方案3】:
      public void keyPressed(KeyEvent k) {
          if(k.getKeyCode()==KeyEvent.VK_ENTER){
               new handler().**actionPerformed(k)**;
          }
      }
      

      你忘记调用 actionPerformed。

      【讨论】:

      • 不仅您的代码甚至无法编译(KeyEvent 不能强制转换为 ActionEvent),这也是一个糟糕的建议。看看其他答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多