2017-01-22 127 views
2

我正在爲學校創建測驗。有幾個按鈕用於在按下時顯示新問題,併爲4個答案的按鈕創建4個不同的ActionListeners。 現在我需要在按下一個按鈕後刪除4 ActionListeners。 我可以從按鈕本身刪除ActionListener,但我想要刪除其他3 ActionListeners以及。Java:如何刪除匿名ActionListeners?

每一個新的ActionListener看起來是這樣的:

btAnswer1.addActionListener(new java.awt.event.ActionListener() 
    { 
     @Override 
     public void actionPerformed(java.awt.event.ActionEvent evt) 
     { 
      lResult.setForeground(Color.red); 
      lResult.setText("Wrong Answer :("); 
      // The team is changed. 
      if (aktTeam == 1) 
      { 
       aktTeam = 2; 
       lAktTeam.setText("Team 2"); 
      } 
      else 
      { 
       aktTeam = 1; 
       lAktTeam.setText("Team 1"); 
      } 
      // Here, this ActionListener is removed. But the others should 
      // be removed too. 
      btAntwort1.removeActionListener(this); 
     } 
    }); 

我希望有人可以提供幫助。 :)

編輯:由davidxxx解決。謝謝!

+0

這是'awt' ???? – CKing

+0

保存新創建的ActionListener的引用(例如在一個數組中),然後重用這些引用以在稍後刪除它們。 – Stephan

+0

您是否參考了包含所有按鈕的組件? – CKing

回答

3

1)在你的榜樣,你不要從同BTN刪除ActionListener哪一個你已經添加偵聽器:

你將它添加到btAnswer1

btAnswer1.addActionListener(new java.awt.event.ActionListener()... 

但你刪除它從btAntwort1

所以,它不應該工作。

現在我需要刪除4個ActionListeners後按下一個按鈕是 按下。

2)如果刪除相關的按鈕全部ActionListener s是在我們使用的情況下有效,你可以這樣做:

for(ActionListener listener : btAntwort1.getActionListeners()) { 
     btAntwort1.removeActionListener(listener); 
} 

否則,如果你不想刪除相關聯的所有ActionListener小號在該按鈕中,當您想從按鈕中刪除它們時,您不應該將匿名ActionListener實例內聯以保留對它們的引用。
例如做到這一點:

ActionListener actionListenerOne = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      ... 
     } 
    }; 

    ActionListener actionListenerTwo = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      ... 
     } 
    }; 

現在你有例如在ActionListener情況下,您可以添加到該按鈕的兩個引用。

所以,你可以這樣做:

JButton button = ...; 
button.addActionListener(actionListenerOne); 
button.addActionListener(actionListenerTwo); 

及更高版本:

button.removeActionListener(actionListenerOne); 
button.removeActionListener(actionListenerTwo); 
+0

這不是什麼OP是尋找:) – CKing

+0

@GhostCat你好,謝謝:)我希望你很好。讓我們見面幾分鐘,我會告訴你我的想法。 – davidxxx

+0

@GhostCat,這個問題很清楚。我只注意到它錯過了可能的代碼示例來說明並給出一種方法讓人們測試他們的答案。 – davidxxx