Wie kann ich den JFrame erhalten, in dem ein JPanel lebt?
Meine aktuelle Lösung besteht darin, das Panel nach dem übergeordneten Element (usw.) zu fragen, bis ich ein Fenster finde:
Container parent = this; // this is a JPanel
do {
parent = parent.getParent();
} while (!(parent instanceof Window) && parent != null);
if (parent != null) {
// found a parent Window
}
Gibt es einen eleganteren Weg, eine Methode in der Standardbibliothek?
java
swing
jframe
swingutilities
Scravy
quelle
quelle
Hierfür gibt es zwei direkte, unterschiedliche Methoden
SwingUtilities
, die dieselbe Funktionalität bieten (wie in ihrem Javadoc angegeben). Sie kehren zurück,java.awt.Window
aber wenn Sie Ihr Panel zu a hinzugefügt habenJFrame
, können Sie es sicher umwandelnJFrame
.Die 2 direkten und einfachsten Wege:
Der Vollständigkeit halber einige andere Möglichkeiten:
quelle
quelle
Applet
(nichtWindow
oderFrame
) sein könnte.Wie andere Kommentatoren bereits erwähnt haben, ist es nicht allgemein gültig, einfach zu besetzen
JFrame
. Das funktioniert in den meisten Sonderfällen, aber ich denke, die einzig richtige Antwort istf3
von icza in https://stackoverflow.com/a/25137298/1184842weil dies eine gültige und sichere Besetzung ist und fast so einfach wie alle anderen Antworten.
quelle