Ich weiß, ab Java 1.5 , Man kann eine Komponente wie folgt zu einem JFrame hinzufügen:
myFrame.add (myButton);
anstelle von:
myFrame.getContentPane (). add (myButton);
Warum war das nicht immer so?
Wie in der JFrame-API beschrieben, tun dies beide Das gleiche: füge eine Komponente zum contentPane hinzu. Es ist erst vor kurzem (Java 1.5 vielleicht?) Swing hinzugefügt die syntaktische Zucker / Convenience-Methode, damit Sie diesen Aufruf direkt auf dem JFrame (oder einem anderen Swing Top-Level-Container), aber Sie sind immer noch zu den ContentPane hinzuzufügen. Gleiches für remove(...)
und setLayout(...)
Das wird nur allzu deutlich, wenn Sie versuchen, die Hintergrundfarbe des JFrame über myJFrame.setBackground(Color.green);
zu setzen und nichts passiert. Aus diesem Grund bin ich nicht allzu glücklich mit dieser Veränderung. Das und auch, weil ich ein alter Groll sein muss.
4753342: Die Top-Level-Komponente von Swing sollte das Hinzufügen / Entfernen umleiten Methoden zu ContentPane
Beschreibung:Im Gegensatz zur AWT Programmierung,
JFrame
/JDialg
/JWindow
/JApplet
/JInternalFrame
erlauben Ihnen nicht hinzuzufügenComponent
s, stattdessen müssen Sie überJRootPane
lernen und hinzufügen KinderComponent
s dazu. Dies fügt unnötige Verwirrung zu neuen hinzu Entwickler.Vor 5.0 versucht, ein
%Vor%Component
aus einem von% hinzuzufügen oder zu entfernen Diese Top-EbeneComponent
s würde dazu führen, dass eine Ausnahme ausgelöst wird. Im 5.0, es wird keine Ausnahme ausgelöst, stattdessen wirdComponent
dem Inhaltsteil hinzugefügt oder entfernt. Dies führte zu mehreren Überarbeitungen zum Javadoc vonJFrame
,JDialog
,JWindow
,JApplet
und %Code%. Dies wurde in RootPaneContainer's zusammengefasst Javadoc:
Auch hier ist ein verwandter Bug: