gpt4 book ai didi

java - add 方法与 setContentPane 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 23:36:23 24 4
gpt4 key购买 nike

此代码输出一个框架,其中在图像上放置了一个按钮。如果我将语句从 fr.setContentPane( new JPanel... 更改为 fr.add(new JPanel...),我只会看到大小为 的按钮>700,700。有什么区别?

public class Tester {

public static void main(String args[]) {
try {
JFrame fr = new JFrame();
fr.setContentPane(new JPanel() {
BufferedImage image = ImageIO.read(new File("C:\\Users\\user\\Documents\\NetBeansProjects\\JavaApplication1\\src\\javaapplication1\\meaning.JPG"));
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0,0,700,700, this);

}
});
fr.add(new JButton("Press Me"));
fr.setSize(700,700);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setResizable(false);
}catch(Exception exc) {
exc.printStackTrace();
}
}
}

最佳答案

JFrame#add 基本上调用 JFrame#getContentPane().add,所以它只是简写。

所以你的代码实际上是在说......

fr.setContentPane(new JPanel() {...});
fr.getContentPane().add(new JButton("Press Me"));

现在,当您注释掉 setContentPane 行时,JFrame 默认情况下使用 BorderLayout,按钮现在布局在(框架的默认)内容 Pane 的 CENTER 位置,并填充整个可用空间。

通过调用...可以获得与原始代码相同的效果...

JPanel background = new JPanel() {...};
background.add(new JButton("Press Me"));
fr.add(background);

看看Using top-level containersHow to use Root Panes了解更多详情

关于java - add 方法与 setContentPane 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628062/

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