2017-01-22 7 views
2

Ich erstelle ein Quiz für die Schule. Es gibt mehrere Schaltflächen für die Fragen, die beim Drücken die neue Frage anzeigen und 4 verschiedene ActionListeners für die Schaltflächen der 4 Antworten erstellen. Jetzt muss ich die 4 ActionListeners entfernen, nachdem eine Taste gedrückt wurde. Ich bin in der Lage, die ActionListener von der Schaltfläche selbst zu entfernen, aber ich möchte auch die anderen 3 ActionListeners entfernen.Java: Wie man anonyme ActionListeners entfernt?

Jede neue ActionListener sieht wie folgt aus:

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); 
     } 
    }); 

ich jemand hoffen, helfen kann. :)

Bearbeiten: Von davidxxx gelöst. Vielen Dank!

+0

Ist das 'awt' ???? – CKing

+0

Speichern Sie die Referenzen des neu erstellten 'ActionListener's (in einem Array zum Beispiel) und verwenden Sie diese Referenzen dann erneut, um sie alle später zu entfernen. – Stephan

+0

Haben Sie Bezug auf die Komponente, die alle Schaltflächen enthält? – CKing

Antwort

3

1) In Ihrem Beispiel Sie auf dem nicht die ActionListener aus dem gleichen btn entfernen, die man Ihnen den Hörer hinzugefügt haben:

Sie fügen es zu btAnswer1:

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

Aber Sie entferne sie aus dem btAntwort1:

btAntwort1.removeActionListener(this); 

So sollte es nicht funktionieren.

Jetzt muss ich die 4 ActionListeners entfernen, nachdem eine Taste gedrückt wurde.

2) Wenn das Entfernen der alle ActionListener s auf die Taste zugeordnet ist, in unserem Anwendungsfall gültig ist, können Sie tun:

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

Andernfalls, wenn Sie möchten, die alle nicht entfernen ActionListener s zugeordnet Auf die Schaltfläche sollten Sie die anonymen ActionListener Instanzen nicht inline einfügen, um einen Verweis auf sie zu behalten, wenn Sie sie von der Schaltfläche entfernen möchten.
Zum Beispiel tun:

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

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

Jetzt können Sie zum Beispiel zwei Verweise auf die ActionListener Instanzen haben Sie auf die Schaltfläche hinzufügen.

So können Sie tun:

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

und später:

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

Das ist nicht was der OP sucht :) – CKing

+0

@GhostCat Hallo, danke :) Ich hoffe es geht dir gut. Lass uns einige Minuten zusammenkommen und ich werde dir meine Meinung sagen. – davidxxx

+0

@GhostCat, die Frage ist sehr klar. Ich stelle nur fest, dass es wahrscheinlich Code-Beispiele vermisst, um Menschen zu veranschaulichen und ihnen einen Weg zu geben, ihre Antwort zu testen. – davidxxx

Verwandte Themen