簡體   English   中英

如何在Java Swing中為多個按鈕添加多個ActionListener

[英]How to add multiple ActionListeners for multiple buttons in Java Swing

我知道如何為它創建一個按鈕和一個動作監聽器。 但是我希望它們有幾個按鈕和actionListeners,它們可以執行彼此無關的單獨操作。

例:

protected JButton x;

x = new JButton("add");
x.addActionListener(this);

public void actionPerformed(ActionEvent evt) { //code.....}

現在我想要其他按鈕可能有不同的功能,如減法,乘法等,請建議。 謝謝

關於什么:

    JButton addButton = new JButton( new AbstractAction("add") {
        @Override
        public void actionPerformed( ActionEvent e ) {
            // add Action
        }
    });

    JButton substractButton = new JButton( new AbstractAction("substract") { 
        @Override
        public void actionPerformed( ActionEvent e ) {
            // substract Action
        }
    });

使用內部類:

x = new JButton("add"); 
x.addActionListener(
  new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      //your code here
    }
  }
);

您可以使用ActionEvent.getSource()來確定源並相應地執行操作,也可以為每個源定義不同的ActionListeners

怎么樣...

protected JButton x, z, a, b,c;

x = new JButton("add x");
z = new JButton("add z");
a = new JButton("add a");
b = new JButton("add b");
c = new JButton("add c");
x.addActionListener(this);
z.addActionListener(this);
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);

然后

public void actionPerformed(ActionEvent evt)
{
     if (evt.getSource()==x)
         {
            //do something
         }
     else if (evt.getSource()==z)
         {
            //do something
         }
     else if (evt.getSource()==a)
         {
            //do something
         }
     else if (evt.getSource()==b)
         {
            //do something
         }
     else if (evt.getSource()==c)
         {
            //do something
         }
}

這對我來說總是有用,但說實話,我不確定這是不是不好的做法

您只需要每次都創建ActionListener新實例。 BTW由於很多原因,建議使用Action代替。

這里有一個很好的資源,它也解釋了為什么你應該使用Action over ActionListeners,一個名為How to Use Actions的Java教程

編輯 :@fmucar是對的,你可以在一個ActionListener中完成所有操作。 雖然具有單獨的功能操作允許您獨立地重用它們。

您可以創建不同的動作偵聽器實例,而不是使用您的類:

x.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e)
    { ... }
});

還有其他一些方法來創建動作偵聽器,就像任何類一樣,但對於簡短的動作,這個(匿名類)是一種方便的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM