繁体   English   中英

如何在事件处理程序(JAVA)中触发内部类事件处理程序

[英]How to trigger inner class event handler inside an event handler (JAVA)

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

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

关键事件处理程序:

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

内部类eventhandler:

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));
}

}

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

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

供进一步参考:

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

对于JTextField您可以直接向其添加handler

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

ENTER -pressed时自动触发ActionListener

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

对于其他JComponent使用Swing KeyBindings

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

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

你忘了叫actionPerformed。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM