Perché è JFrame non layout di quello che ho impostato?
Domanda
Se ho impostato un layout su un JFrame
con setLayout
e quindi recuperare con getLayout
tanto sono un LayoutManager
diverso. Che cosa sta succedendo qui ??
public class Lay {
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
java.awt.Container container =
new javax.swing.JFrame();
//new javax.swing.JPanel();
java.awt.LayoutManager layout =
new java.awt.GridLayout();
container.setLayout(layout);
layout = container.getLayout();
System.err.println(layout);
}
});
}
}
Dà
java.awt.BorderLayout[hgap=0,vgap=0]
ma se sostituisco JFrame
con JPanel
ottengo
java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0]
Soluzione
public void setLayout(LayoutManager manager)
Imposta il
LayoutManager
. Ignorato per inoltrare la chiamata condizionatamente alcontentPane
. Fare riferimento aRootPaneContainer
per ulteriori informazioni.
E dal href="http://java.sun.com/javase/6/docs/api/javax/swing/RootPaneContainer.html" rel="noreferrer"> RootPaneContainer
pagina :
Questa interfaccia serve come un marcatore per i costruttori GUI swing che devono trattare i componenti come
JFrame
, che contengono un singoloJRootPane
, specialmente. Per comoditàJFrame
,JDialog
,JWindow
,JApplet
eJInternalFrame
, per impostazione predefinita, in avanti, per impostazione predefinita, tutte le chiamate aiadd
,remove
esetLayout
metodi, allacontentPane
. Ciò significa che è possibile chiamare:rootPaneContainer.add(component);
invece che:
rootPaneContainer.getContentPane().add(component);
Un JRootPane
è un componente comune che tutti i componenti pesanti, utilizzate per apparire come una finestra nativa del sistema operativo. Gestisce la barra dei menu, vicino minimizzare pulsanti / / massimizzare, ecc JFrame
cerca di nascondere il fatto che JRootPane
fa il vero lavoro da voi, ma in questo caso è solo reso le cose più confuse.