super.paint()在图像上不可见

时间:2013-09-23 17:25:54

标签: java image swing override graphics2d

我正在构建一个以图像为背景的JFrame。我重写了paint()方法以在JFrame中绘制该图像,但是当我在Eclipse中启动应用程序时,我添加的JComponents都不可见。这是我的SSCCE:

public class foo extends JFrame{

   Image i = ImageIO.read(new URL("http://pittsburgh.about.com/library/graphics/regatta_balloons-640.jpg"));

   foo(){
       setSize(100, 100);
       add(new JButton("Foo"));
       setVisible(true);
   }

   @Override public void paint(Graphics g){
        super.paint(g);
        g.drawImage(i, 0, 0, null);
   }
}

3 个答案:

答案 0 :(得分:1)

不要覆盖JFrame的paint()方法!这不是自定义绘画的方式。

如果您尝试在框架中添加背景图片,请查看Background Panel以了解几种方法。

答案 1 :(得分:0)

语句按您指定的顺序执行。如果您在 g.drawImage之后放置super.paint(g); ,则会在之后绘制图像,其他内容将被绘制,即 over 其他的东西。这就像所有的画作。你之后绘制的内容将超过之前的平局。

答案 2 :(得分:0)

以下是关于如何设置JFrame背景的好tutorial

JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());

OR

setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png")));