2017-01-22 131 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