Beyond Good and Evil
-
Hallo Jungs und auch Mädels
Hab ein kleines Problem und zwar hab ich ein JFrame in dem mehrere JPanel untergebracht sind und auf dem einen JPanel sind ein Paar Knöpfe mit Funktionen. Bei einem Knopf hab ich einen MouseListener angehängt, der darauf reagiert wenn man ihn drückt. Bis daher ist noch alles in Ordnung, aber jetzt kommt mein Problem. Der Button hat die Funktion, dass er von dem JPanal aus das JFrame unsichtbar machen soll, denn er ruft ein anderes Fenster auf und das vorhergehende wird nicht mehr benötigt. Leider ist die setVisible Methode so gedacht, dass man sie nicht in einem statischen Kontext aufrufen kann, also wie stell ich das an, dass sich das eine Fenster „schließt“ also unsichtbar wird und das andere sich öffnet?
-
MC DarkMaster schrieb:
Leider ist die setVisible Methode so gedacht, dass man sie nicht in einem statischen Kontext aufrufen kann, also wie stell ich das an, dass sich das eine Fenster „schließt“ also unsichtbar wird und das andere sich öffnet?
Funktioniert es den nicht?
JFrame frameB; JFrame frameA; JButton button; frameA.add(panel); button.addMouseListener(.... { mouseButtonDown() { frameA.setVisible(false); frameB.setVisible(true); } });
-
Nein leider hat es so nicht funktioniert, jedoch bin ich jetzt dahintergekommen, was ich ändern muss, damit es läuft. Und zwar musste ich die Instanz von dem JFrame das ich angelegt habe final machen. Warum das so ist, kann ich mir leider nicht erklären, aber dadurch hats funktioniert.
Also anstatt:
public StartBoard(StartWindow startwindow)
Musste ich
public StartBoard(final StartWindow startwindow)
schreiben.Naja jedenfalls funktionierts jetzt, aber trotzdem danke für deine Antwort.
-
MC DarkMaster schrieb:
Warum das so ist, kann ich mir leider nicht erklären, aber dadurch hats funktioniert.
Ganz genau kann ich es dir auch nicht sagen, aber das hängt auf jeden Fall mit dem MouseListener (anonyme Klasse) zusammen. Wenn du in dem Listener eine Variable von außerhalb benutzen willst, muss diese final sein. Das final sorgt dafür, dass man der Variable später nicht etwas anderes zugewiesen wird. Wäre es doch möglich, denke ich wäre es unklar welcher Stand der Variable nun gemeint ist.
Beispiel:
frameA = A; button.addMouseListener(.... { mouseButtonDown() { frameA.setVisible(false); } }); frameA = B;
Unklar ob A oder B unsichtbar gemacht wird beim Mausevent.