2016-11-24 1 views
0

Ich baue ein JPanel und es wird zu einem JInternalFrame gegeben. Jetzt möchte ich, dass, wenn jemand auf die Schaltfläche X des JInternalFrame klickt, es versteckt ist, nicht geschlossen. Das Problem ist, dass ich diese Funktion im JPanel implementieren muss und ich habe keinen Zugriff auf den JInternalFrame.Hide JInternalFrame von JPanel

Ist das möglich?

Ich weiß aus dem JInternalFrame kann es mit setDefaultCloseOperation(HIDE_ON_CLOSE); realisiert werden, aber ich weiß nicht, wie es aus dem JPanel. Natürlich habe ich in SO gesucht, aber ich habe nichts gefunden, was zu meinem Fall passt.

Eine weitere Frage, nur zum Verständnis: Was passiert, wenn Sie auf die Schaltfläche X klicken? Wird die dispose() Funktion aufgerufen? Ich bin neu in Java Swing und interessiert, wie es funktioniert.

+0

* Ist das möglich * Nein, es ist nicht wahr?. Ja, die dispose-Methode wird aufgerufen, wenn der Benutzer auf das "X" klickt. –

Antwort

1

aber ich weiß nicht, wie es geht aus dem JPanel

können Sie die SwingUtilities-Klasse verwenden, den übergeordneten Container zu finden.

Etwas wie:

JInternalFrame frame = (JInternalFrame)SwingUtilities.ancestorOfClass(JInternalFrame.class, thePanel); 
+0

Wenn ich das Panel initialisiere, hat es keinen übergeordneten Container, daher erhalte ich eine NullPointerException. Ich kann es danach nicht benutzen, aber danke – Ludy

+0

@Ludy, das ist richtig. Sie sollten diesen Code beim Erstellen der Komponenten NICHT ausführen. Der obige Code wird im 'ActionListener' ausgeführt, den Sie der Schaltfläche hinzufügen, die Sie zu Ihrem Panel hinzufügen. – camickr

+0

jetzt habe ich einen Weg gefunden, wie Sie Ihre Linie benutzen können. Ein AncestorListener arbeitet für mich. BTW sollte ich meine Lösung posten? – Ludy