2012-05-07 46 views
4

假設我有一個名爲button1的按鈕。如果我要創建我應該選擇哪一種方法按鈕一個ActionListener:(在第二個,你必須擴展ActionListener接口)添加ActionListener的方法

// Imports 
public class Test{ 
    JButton test = new JButton(); 
    Test(){ 
     // Pretend there is an adapter 
     test.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
       ... 
      } 
     }); 
    ... 
} 

// Imports 
public class Test2 extends ActionListener{ 
    JButton button2 = new JButton(); 
    Test2(){ 
     button2.addActionListener(this); 
    } 
    // Pretend there is an adapter 

    public void actionPerformed(ActionEvent e){ 
     Object src = e.getSource(); 
     if(src == button2){ 
      ... 
     }else{ 
      ... 
    } 
} 

回答

3

在第二種情況下,你必須實現ActionListener接口。除此之外,答案是「取決於」。如果爲多個圖形組件重用相同的動作偵聽器是有意義的,則使用第二個版本。如果處理事件是單個組件的一次性事件,則使用第一個版本。

3

去的第一個。你不應該讓GUI類也實現你的監聽器,因爲這要求GUI或視圖類做太多。通過分離出你的監聽器代碼,即使它在一個匿名監聽器類中,如果你想將你的監聽器代碼與你的視圖代碼完全分開,你將會有更容易的時間。

+0

+1不會讓您的UI類實現偵聽器接口 – Robin

1

如果每個偵聽器都是唯一的,那麼您可能需要使用匿名類(第一個示例)。如果你不得不一遍又一遍地重寫相同的代碼,那麼在命名類中實現它(如你的第二個例子)會更好,所以你可以重用同一個監聽器。但是,您可能會發現將監聽器實現放入不同的類(甚至是實現ActionListener的內部類)可以更好地將您的代碼邏輯分離,而不是擴展ActionListener(而不是第二個示例)。