Best Practices für ActionListener

8


Sorry für den Titel, wahrscheinlich zu allgemein.

Ich lese bereits Wie schreibe ich einen Action Listener Tutorial von Java und ich bereits lese diese Frage , aber ich habe noch einige Zweifel: Ich habe mich gefragt, welche Lösung das ist am besten, wenn ich die gleiche Aktion mehrere Male durchführen muss.

Ich möchte das gleiche ActionListener wiederverwenden, aber ich bin mir nicht sicher, wie ich das am besten erreichen kann (in Bezug auf: Lesbarkeit des Codes, Erhaltung des Codes, Leistung und Codestil).

Zuerst der "Standard" -Code (den ich verwenden würde, wenn ich den Action-Listener nicht wiederverwende):

%Vor%

Auf diese Weise kann ich nichts wiederverwenden, da es eine anonyme innere Klasse ist ...

Nun kann ich mir folgende Lösungen vorstellen:

  1. Speichern Sie eine Referenz einer anonymen inneren Klasse in einem Feld (das höchstwahrscheinlich static final ist);
  2. Schreiben Sie eine neue Klasse, die ActionListener interface implementiert.

Beispielcode für Lösung 1:

%Vor%

Beispielcode für Lösung 2:

%Vor%

Ich habe einige Zweifel an beiden Lösungen:

  1. Wo sind Verweise auf anonyme Aktionslistener gespeichert? Ich könnte eine Art Utility-Klasse (zB ActionListenersUtil ) haben, wo alle Action-Listener gespeichert werden, die ich in static final -Feldern wiederverwenden möchte, aber ich mag es nicht ... es scheint mir schlechtes Design.

  2. Es macht mehr Sinn, wahrscheinlich am besten folgt dem Befehlsmuster ... Ich hatte anfangs einige Zweifel die Pakete ... Ich hätte gerne alle Listener in einem separaten Paket (zB com.myapp.gui für Gui-Elemente und com.myapp.gui.listeners für Listener. Aber als ich das aufgeschrieben habe, habe ich gemerkt, dass ich keine andere Wahl habe: der einzige Ort wo es macht Sinn, ist im selben Paket (weil sie müssen package-private sein), auch wenn ich der Ordnung halber möchte ich sie alle in einem separaten Paket setzen. Ich habe jedoch noch einige Zweifel, weil die meisten Aktionshörer wiederverwendbar sind, selbst wenn sich die GUI ändert; Es wäre immer noch eine gute Idee, es im selben Paket zu haben?

Noch eine Frage: Was ist der Unterschied zwischen dem Aufruf von btnMenu.addActionListener(MENU_ACTION_LISTENER); und btnMenu.addActionListener(new MenuActionListener()); (spricht man von JVM, Klassenladen, Klassenkompilierung, von jeder Klasse belegter Speicher, Garbage Collection usw.)?

Bitte helft mir, ich bin gerade so verwirrt! : (

    
tmh 17.09.2012, 16:22
quelle

1 Antwort

14

Am besten erstellen Sie Action anstelle von ActionListener , wenn Sie sie an Schaltflächen, Menüs, ... anhängen müssen. Ein Action ist das Modell eines JButton und das Modell soll geteilt werden

Dies gibt Ihnen auch die Möglichkeit, den Text, das Symbol, den aktivierten Status und andere Eigenschaften aller Schaltflächen zu ändern, an die der Action gleichzeitig ohne mehrere Aufrufe angefügt ist. Außerdem kann es an Menüpunkten und Ähnlichem angebracht werden.

Um ein Action zu erstellen, müssen Sie nicht von vorne anfangen. AbstractAction ist ein guter Ausgangspunkt. Das Swing Action -Tutorial ist auch eine gute Lektüre.

    
Robin 17.09.2012 16:34
quelle