Java:在我调整窗口大小之前,图像不会显示

时间:2011-06-20 17:38:55

标签: java image user-interface resize jpanel

我在java编程,我正在进入GUI和图形。在我的程序中,我将图像绘制到JPanel上,并将JPanel添加到主窗口。我遇到的问题是,当我运行程序时,图像不会显示,直到我手动调整窗口大小。以下是相关代码:

绘制图像的位置:

public class painting extends JPanel{
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        this.setBackground(Color.WHITE);
        g.drawImage(Toolkit.getDefaultToolkit().getImage("image.png"), 0, 0, null);
    }
}

将JPanel添加到JFrame(c是GridBagConstraints):

public class GUI extends JFrame{
    public GUI(){
        painting Pnt = new painting();
        c.gridx = 1;    c.gridy = 0;
        c.ipadx = 540;  c.ipady = 395;
        add(Pnt, c);        
    }
}

设置窗口的位置:

public class MainC{
    public static void main (String args[]){
        GUI gui = new GUI();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.pack();
        gui.setVisible(true);
        gui.setTitle("Title");
    }
}

谢谢, 贝内特

编辑:我注意到它有时会正确显示图像,但如果我关闭程序并重试,直到我调整它就不起作用。

EDIT2:以下是文件GUI classMainC class

4 个答案:

答案 0 :(得分:4)

Toolkit.getImage()异步工作。使用ImageIO.read()或添加MediaTracker

答案 1 :(得分:0)

GUI构造函数中,你应该先调用super()。

同时移动:

gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.pack();
gui.setVisible(true);
gui.setTitle("Title");

在GUI构造函数中。

答案 2 :(得分:0)

确实

Toolkit.getDefaultToolkit().getImage("image.png")

带给你的照片?
我尝试过:

public class Gui extends JFrame{
public Gui() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new BorderLayout());
    this.setBounds(100, 100, 300, 300);
    JPanel pnl = new JPanel(){
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            this.setBackground(Color.WHITE);
            try {
                g.drawImage(new Robot().createScreenCapture(new Rectangle(90, 90)), 0, 0, null);
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }
    };
    getContentPane().add(pnl, BorderLayout.CENTER);
}
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new Gui().setVisible(true);
        }
    });
}

它有效。

答案 3 :(得分:0)

您的问题必须在代码中的其他位置。我将您的三个类复制并粘贴到我的IDE中。我唯一改变的是GUI.java我添加了setLayout(new GridBagLayout());GridBagConstraints c = new GridBagConstraints();,我将图像的位置更改为我自己的位置。窗口按预期工作,图像立即显示。

我假设您在此处未显示其他代码,例如我添加的c的初始化。检查您的其他代码,确保最初不重绘您的图像。此外,如果您发布其他代码,我可以帮助您确定问题