gpt4 book ai didi

java - JFrame#setLayout(LayoutManager) 不起作用。强制执行 getContentPane().setLayout(LayoutManager)

转载 作者:行者123 更新时间:2023-12-01 18:09:21 25 4
gpt4 key购买 nike

运行实例化此类的代码时:

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());
}
}
}

最佳答案

我认为你在某个地方遗漏了一些东西。以下是我的电脑上使用 的结果和

setLayout(layout);
System.out.println(getContentPane().getLayout()); // CardLayout is printed
System.out.println(getLayout()); // BorderLayout is printed

getContentPane().setLayout(layout);
System.out.println(getContentPane().getLayout()); // CardLayout is printed
System.out.println(getLayout()); // BorderLayout is printed
<小时/>

为什么 CardLayout 不总是打印?

因为,不像 JFrame#setLayout(LayoutManager)JFrame#getLayout() 不会调用其 contentPane()

事实上,JFrame#getLayout()实际上继承自Container#getLayout()它将从实际组件返回实际的 LayoutManager(在本例中是 JFrame 而不是它的 contentPane())。

<小时/>

JFrame#setLayout

Sets the LayoutManager. Overridden to conditionally forward the call to the contentPane. Refer to RootPaneContainer for more information.

关于java - JFrame#setLayout(LayoutManager) 不起作用。强制执行 getContentPane().setLayout(LayoutManager),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com