action-listener in einer anderen Klasse, java
ist es möglich, zwei Klassen, und in einer etwas wie
arrayButtons[i][j].addActionListener(actionListner);
und in einem anderen
ActionListener actionListner = new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int j = 0; j < arrayButtons.length; j++) {
for (int i = 0; i < arrayButtons[j].length; i++) {
if (arrayButtons[j][i] == e.getSource()) {
if ((gameNumber == 2) && (playHand.getNumberOfCards() == 0)) {
if (player[j].getCard(i).getSuit() == Suit.HEARTS.toString() && player[j].hasSuitBesideHearts())
//second game
messageOnTable("xxx");
else{
arrayButtons[j][i].setVisible(false);
test[j].setIcon(player[j].getCard(i).getImage());
pnCardNumber[j].setText(Integer.toString(player[j].getCard(i).getNumber()));
pnCardName[j].setText(player[j].getCard(i).toString());
pnCardSuit[j].setText(player[j].getCard(i).getSuit());
playHand.addCard(player[j].getCard(i), j);
player[j].removeCard(i);
}
}
}
//und mehr
der Grund ist, weil ich brauche, zu trennen-Taste (swing), um das action-listener
wie kann ich das machen ?
Dank
- Ja, Sie können mit ActionListeners von anderen Klassen oder einer separaten Klasse implementiert das ActionListener-interface, aber der Teufel steckt im Detail. Wir können leichter beraten, wie Sie dies tun, wenn wir wissen, mehr details über Ihr Programm.
InformationsquelleAutor user455318 | 2011-02-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht nur ist es möglich, zu trennen, diese beiden, es ist auch empfehlenswert (siehe MVC-Muster - es ist sehr viel über die Trennung screen-Steuerelemente wie Schaltflächen und Logiken des Programms)
Die einfachste Möglichkeit, die mir in den Sinn kommt, ist zu tun, schreiben Sie eine benannte Klasse, die
ActionListener
- Schnittstelle, so etwas wie dieses:Und dann fügen Sie es zu Ihrem Tasten:
JFrame
und dann pass nurjFrame
Instanz auf den Hörer.Zur Antwort: "mein problem ist, dass action-listener haben viele Variablen swing wie Schaltflächen, zum Beispiel,ja, wenn ich in eine andere Klasse, ich habe Probleme mit diesem"
Ihre action-listener-Klasse könnte haben einen Konstruktor, der einen parameter vom Typ der view-Klasse:
Dann aus Ihrer Sicht:
können Sie es leicht tun, indem geschachtelte Klassen,
aber ich denke, der beste Weg ist, pass das parent-Objekt als parameter, um das Konstrukt von Objekt und verwenden Sie es als ein action-handler;
Ja, es kann getan werden. Es ist sehr einfach, in einer Klasse, Sie haben Ihre Tasten, in der anderen Klasse, die Sie gerade brauchen, um das implementieren eines ActionListener und nur Ihre //cmd
zu trennen, dass die Funktion der Taste. Um dies zu tun, müssen Sie die Verwendung von e.getActionCommand().equals(buttonActionCommand).
Beispiel-code:
Hinzufügen, dass die Zuhörer auf Ihre Schaltfläche nur:
Es ist ein bisschen off-topic, aber Sie sollten definitiv nicht verwenden die
==
Betreiber zu vergleichenString
s, wie Sie zu sein scheinen, zu tun auf dieser Linie:Dies ist, weil
String
s sind Zeiger, nicht die tatsächlichen Werte, und Sie erhalten möglicherweise unerwartete Verhalten mit der==
Betreiber. Verwenden Sie diesomeString.equals(otherString)
- Methode statt. Und auchist viel besser als die andere Weise herum
weil im ersten Beispiel können Sie vermeiden, immer eine NullPointerException, wenn
stringVariable
null ist. Es ist einfach false zurück.