2017-01-22 33 views
2

私は学校のためのクイズを作成しています。質問のためのいくつかのボタンがあります。これを押すと、新しい質問が表示され、4つの回答のボタンに対して4種類のActionListenersが作成されます。 ボタンを1回押した後で、4 ActionListenersを削除する必要があります。 ボタン自体からActionListenerを削除できましたが、もう1つを削除したいと思います。ActionListenersJava:匿名の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)あなたは、リスナーを追加している1上の同じBTNからActionListenerを削除しないでください、あなたの例では:あなたがbtAnswer1に追加

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

しかし、あなたbtAntwort1から削除してください:

btAntwort1.removeActionListener(this); 

これは機能しません。

ここで、ボタンを1つ押した後に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インスタンス上の2つの参照を持っています。

だからあなたが行うことがあります。

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

以降:

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

これはOPが探しているものではありません:) – CKing

+0

@GhostCatこんにちは、ありがとう:)私はあなたが大丈夫です願っています。何分も会わせて、私はあなたに私の心を伝えます。 – davidxxx

+0

@GhostCat、質問は非常に明確です。私は、説明するためのコード例と、答えをテストするための人々のための道のりを見逃していることに留意します。 – davidxxx

関連する問題