【问题标题】:Drawing a background image绘制背景图像
【发布时间】:2013-04-10 03:19:21
【问题描述】:

我画了一张我的背景图,一切都很好,但是当我尝试在框架中添加一些 JButton 时,整个业务出错了,我画的图片消失了,我看到了原始背景。

图片是这样的:

public void paint(Graphics g){
    g.drawImage(bg, 0, 0, null);
}

我想我的问题是与paint方法有关,需要说明的是我正在扩展JFrame类。

编辑: 这里有一些图片来说明我的意思。

它首先绘制我的图像:

当我将鼠标移动到应该绘制按钮的位置时,我得到的结果是:

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    import java.awt.*;
    import java.awt.image.BufferedImage;
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    import java.net.URL;
    import javax.imageio.ImageIO;
    
    public class FrameWithBG {
    
        public static void main(String[] args) throws Exception {
            URL url = new URL("http://i.stack.imgur.com/OVOg3.jpg");
            final BufferedImage bg = ImageIO.read(url);
            Runnable r = new Runnable() {
    
                @Override
                public void run() {
                    JPanel c = new PanelWithBackgroundImage(bg);
                    c.setLayout(new GridLayout(0,5,16,16));
                    c.setBorder(new EmptyBorder(10, 10, 10, 10));
                    for (int ii = 1; ii < 26; ii++) {
                        c.add(new JButton("Button " + ii));
                    }
                    JFrame f = new JFrame(c.getClass().getSimpleName());
    
                    f.add(c);
                    f.pack();
                    f.setVisible(true);
                }
            };
            // Swing GUIs should be created and updated on the EDT
            // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
            SwingUtilities.invokeLater(r);
        }
    }
    
    class PanelWithBackgroundImage extends JPanel {
    
        Image bg;
    
        PanelWithBackgroundImage(Image bg) {
            this.bg = bg;
        }
    
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
        }
    }
    

    【讨论】:

    • 我试过了,它先画我的背景图,然后画我的按钮,然后它又回到了默认的灰色背景色
    • 已编辑,顺便说一句,您的回答确实有道理,但似乎不是我的问题的主要原因。
    • 好吧,我会尝试重新解释我自己,使用您提到的代码将我带到我附加的第一张图片,并在 2 秒后绘制第 2 张图片。整个其他代码由 netbeans 编码,即框架代码和我拖动的按钮。
    • 好吧,我的错。我之前想说“不要在像JFrame 这样的顶级容器中绘画”,但我现在要补充一下。自定义面板按预期工作。
    • 像我一样将按钮添加到面板中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多