簡體   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