このクラスをインスタンス化するコードを実行する場合:
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());
}
}
}