es ist möglich, zwei Klassen zu haben, und in einem etwas wie
%Vor%und in einem anderen
%Vor%// und mehr Der Grund dafür ist, dass ich den Button (Swing) zum Action-Listener
trennen musswie kann ich?
Danke
Es ist nicht nur möglich, diese beiden zu trennen, es wird auch empfohlen (siehe MVC-Muster - es geht sehr viel darum, Bildschirmsteuerelemente wie Schaltflächen und die Logik Ihres Programms zu trennen)
Der einfachste Weg, der mir in den Sinn kommt, ist, eine benannte Klasse zu schreiben, die ActionListener
interface implementiert, etwa so:
Und fügen Sie es dann zu Ihren Tasten hinzu:
%Vor%Um zu antworten: "Mein Problem ist, dass der Action-Listener viele Variablen wie zum Beispiel swing hat. Wenn ich also in eine andere Klasse wechsle, habe ich Probleme damit"
Ihre Action-Listener-Klasse könnte einen Konstruktor haben, der einen Parameter vom Typ der View-Klasse akzeptiert:
%Vor%Dann aus Ihrer Sicht:
%Vor%Sie können es leicht tun, indem Sie verschachtelte Klassen verwenden, aber ich denke, der beste Weg besteht darin, das Elternobjekt als Parameter an das Konstrukt des Objekts zu übergeben und es als Aktionshandler zu verwenden;
%Vor%Ja, es kann gemacht werden. Es ist sehr einfach; in einer Klasse hast du deine Buttons, in der anderen Klasse musst du nur einen ActionListener implementieren und einfach dein // cmd machen um die Funktion dieser Schaltfläche zu trennen. Um dies zu tun, müssen Sie e.getActionCommand (). Equals (buttonActionCommand) verwenden. Beispielcode:
%Vor%Um diesen Listener auf Ihrer Schaltfläche hinzuzufügen, tun Sie einfach:
%Vor% Es ist ein bisschen off topic, aber Sie sollten definitiv nicht den Operator ==
verwenden, um String
s zu vergleichen, wie Sie in dieser Zeile zu tun scheinen:
Dies liegt daran, dass String
s Zeiger und keine tatsächlichen Werte sind und Sie möglicherweise unerwartetes Verhalten mit dem Operator ==
erhalten. Verwenden Sie stattdessen die Methode someString.equals(otherString)
. Und auch
ist viel besser als andersherum
%Vor%, weil Sie im ersten Beispiel vermeiden, eine NullPointerException zu erhalten, wenn stringVariable
null ist. Es gibt nur falsch zurück.