运行实例化此类的代码时:
static final class MyFrame extends JFrame {
private CardLayout layout = new CardLayout();
public MyFrame() {
setLayout(layout);
System.out.println(getLayout());
}
}
打印的结果是:
java.awt.BorderLayout[hgap=0,vgap=0]
这是JFrame
默认布局。布局没有改变。但是,如果我改变
setLayout(layout);
至
getContentPane().setLayout(layout)
getLayout()
将打印正确的布局。
MVCE:
不设置布局:
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
MyFrame frame = new MyFrame();
frame.setVisible(true);
});
}
static final class MyFrame extends JFrame {
private CardLayout layout = new CardLayout();
public MyFrame() {
setLayout(layout);
System.out.println(getLayout());
}
}
}
设置布局:
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
MyFrame frame = new MyFrame();
frame.setVisible(true);
});
}
static final class MyFrame extends JFrame {
private CardLayout layout = new CardLayout();
public MyFrame() {
getContentPane().setLayout(layout);
System.out.println(getLayout());
}
}
}