JFrame
不覆盖
paintComponent
所以Swing不会调用它。
添加
@Override
方法上方的注释将显示该方法不包含在超级类中。
实现背景图像的最简单方法是创建
JPanel
和超控
油漆组件
那里
更新:
网上有很多例子
窗口
扩展。从设计的角度来看,这是不必要的,因为通常框架没有任何新功能。出于这个原因,只需创建一个直接实例&使用更好(如图所示):
public class BackGroundProblem {
public static void main(String[] args) throws IOException {
final Image image = ImageIO.read(new URL("http://news.beloblog.com/ProJo_Blogs/architecturehereandthere/hallstattsumm.jpg"));
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JPanel backgroundPanel = new ImagePanel(image);
backgroundPanel.add(new JButton("Sample Button 1"));
backgroundPanel.add(new JButton("Sample Button 2"));
frame.add(backgroundPanel);
frame.setLocationByPlatform(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image image;
ImagePanel(Image image) {
this.image = image;
};
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
}