Java drawImage()不绘制

Java drawImage()不绘制,java,image,swing,jcomponent,paintcomponent,Java,Image,Swing,Jcomponent,Paintcomponent,我希望使用自己的paintComponent方法获得canvas,但有时我会看到没有图像的空窗口。我需要调整窗口的大小,以便显示此图像。问题是什么?为什么drawImage有时不绘图?更改 import java.awt.*; import javax.swing.*; public class Main { JFrame jf; Main() { jf=new JFrame(); jf.setDefaultCloseOperation(

我希望使用自己的paintComponent方法获得canvas,但有时我会看到没有图像的空窗口。我需要调整窗口的大小,以便显示此图像。问题是什么?为什么drawImage有时不绘图?

更改

import java.awt.*;
import javax.swing.*;

public class Main
{
    JFrame jf;
    Main()
    {
        jf=new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.add(new MyCanvas());
        jf.pack();
        jf.setVisible(true);
    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {

            @Override
            public void run()
            {
                new Main();
            }
        });
    }
}
class MyCanvas extends JComponent
{
    Image img;
    MyCanvas()
    {
        setPreferredSize(new Dimension(200,200));
        img=Toolkit.getDefaultToolkit().createImage("1.jpg");
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(img,0,0,null);
    }
}

你应该准备好离开。

改变

import java.awt.*;
import javax.swing.*;

public class Main
{
    JFrame jf;
    Main()
    {
        jf=new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.add(new MyCanvas());
        jf.pack();
        jf.setVisible(true);
    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {

            @Override
            public void run()
            {
                new Main();
            }
        });
    }
}
class MyCanvas extends JComponent
{
    Image img;
    MyCanvas()
    {
        setPreferredSize(new Dimension(200,200));
        img=Toolkit.getDefaultToolkit().createImage("1.jpg");
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(img,0,0,null);
    }
}


而且你应该准备好了。

调整窗口大小以重新绘制。我的猜测是,当您最初绘制窗口时,图像尚未加载。@ZeissS,即Toolkit.getDefaultToolkit.createImage1.jpg;此方法即使未完全加载图像也会返回?调整窗口大小以进行重新绘制。我的猜测是,当您最初绘制窗口时,图像尚未加载。@ZeissS,即Toolkit.getDefaultToolkit.createImage1.jpg;即使没有完全加载图像,这个方法也会返回?我认为这不会解决他的问题,但我们必须等待@eXXXXX。。。不得不说。是的,应该是这样,假设他的图像是可加载的,这看起来就像调整大小后的图像一样。让我们看看OP是怎么说的。+1它是有效的,尽管ImageIO可能是更好的选择。注意jComponent默认值。@垃圾神:您仍然希望提供有效的ImageObserver@stryba:实现还不够吗?我认为这不会解决他的问题,但我们必须等待@eXXXXX。。。不得不说。是的,应该是这样,假设他的图像是可加载的,这看起来就像调整大小后的图像一样。让我们看看OP是怎么说的。+1它是有效的,尽管ImageIO可能是更好的选择。注意jComponent默认值。@垃圾神:您仍然希望提供有效的ImageObserver@stryba:实施还不够吗?
g.drawImage(img,0,0,this);