此代码输出一个框架,其中按钮放在图像上。如果我将语句从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();
}
}
}
答案 0 :(得分:3)
JFrame#add
基本上会调用JFrame#getContentPane().add
,所以它只是简写。
所以你的代码实际上在说......
fr.setContentPane(new JPanel() {...});
fr.getContentPane().add(new JButton("Press Me"));
现在,当您注释掉setContentPane
行时,JFrame
默认情况下会使用BorderLayout
,现在按钮位于CENTER
位置(框架的默认内容窗格,并填充整个可用空间。
通过调用...
,您可以获得与原始代码相同的效果JPanel background = new JPanel() {...};
background.add(new JButton("Press Me"));
fr.add(background);