2017-10-12 120 views
0

我正在使用GUI並嘗試獲取不同的按鈕來執行不同的任務。將多個actionListener添加到多個JButton中

當前,每個按鈕導致相同的ActionListener。

public class GUIController { 

public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
public static void createAndShowGUI() { 
    JFrame frame = new JFrame("GUI"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(new GridLayout(3,3)); 

    JLabel leight =new JLabel("8"); 
    frame.getContentPane().add(leight); 
    JLabel lfive =new JLabel("0"); 
    frame.getContentPane().add(lfive); 
    JLabel lthree =new JLabel("0"); 
    frame.getContentPane().add(lthree); 

    JButton beight =new JButton("Jug 8"); 
    frame.getContentPane().add(beight); 
    JButton bfive =new JButton("Jug 5"); 
    frame.getContentPane().add(bfive); 
    JButton bthree =new JButton("Jug 3"); 
    frame.getContentPane().add(bthree); 

    LISTN ccal = new LISTN (leight,lfive,lthree); 

    beight.addActionListener(ccal); 
    bfive.addActionListener(ccal); 
    bthree.addActionListener(ccal); 

    frame.pack(); 
    frame.setVisible(true); 

} 

} 

我的ActionListener文件

public class JugPuzzleGUILISTN implements ActionListener { 
JLabel leight; 
JLabel lfive; 
JLabel lthree; 

JugPuzzleGUILISTN(JLabel leight,JLabel lfive, JLabel lthree){ 
    this.leight = leight; 
    this.lfive = lfive; 
    this.lthree = lthree; 
} 

public void actionPerformed(ActionEvent e) { 
    } 

} 
} 

什麼我在動作事件編寫適用於所有的三個按鈕,我怎樣才能讓這個每個按鈕都有自己的功能? 非常感謝!

+1

'我怎樣才能讓每個按鈕都有自己的功能?' - 爲每個按鈕添加一個不同的ActionListener。 – camickr

+0

您可以使用單個偵聽器並使用'actionCommand'或'source'屬性;你可以使用'clientProperty';你可以爲每個按鈕使用不同的監聽器;你可以使用'Action' API ...許多有據可查的想法 – MadProgrammer

回答

0

我在ActionEvent中寫的任何東西都適用於所有的三個按鈕,我怎樣才能讓每個按鈕都有自己的功能?

您有類似的操作,您希望所有3個按鈕都能夠觸發。但是,您也可以爲每個按鈕實施不同的功能。

其中一種方法將創建3個更多的偵聽器,每個偵聽器將被添加到其各自的按鈕。所以每個按鈕現在將添加2個監聽器(您當前的一個+新創建的監聽器)。

//Example: 

beight.addActionListener(ccal); 
bfive.addActionListener(ccal); 
bthree.addActionListener(ccal); 

beight.addActionListener(ccal_beight); 
bfive.addActionListener(ccal_bfive); 
bthree.addActionListener(ccal_bthree); 

還有其他的方法,如使用if語句在當前的監聽器檢查被點擊的按鈕,但我發現聽衆分開更容易保持較低的代碼耦合。

2

我怎樣才能讓這個每個按鈕都有自己的功能

添加不同的ActionListener到每個按鈕。

更好的是,使用Action而不是ActionListener。一個Action只是一個奇特的ActionListener,它有幾個屬性。

有關定義內部類的示例,請參閱Swing教程How to Use Action中的部分,以便您可以爲每個按鈕創建唯一的Action