在Java中绘制图像时的有趣怪癖

在Java中绘制图像时的有趣怪癖,java,paintcomponent,Java,Paintcomponent,这种方法似乎是: public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer) 在我调整帧的大小之前,其他重载方法不会绘制图像。但是,用于绘制几何图元的所有其他方法都会在第一次打开框架时显示正确的形状。这意味着,如果我想让框架在屏幕中央打开,与我正在绘制的图像一样大,那么我需要调整框架的大小,使其占据整个屏幕,然后将其调

这种方法似乎是:

public abstract boolean drawImage(Image img,
            int x,
            int y,
            ImageObserver observer)
在我调整帧的大小之前,其他重载方法不会绘制图像。但是,用于绘制几何图元的所有其他方法都会在第一次打开框架时显示正确的形状。这意味着,如果我想让框架在屏幕中央打开,与我正在绘制的图像一样大,那么我需要调整框架的大小,使其占据整个屏幕,然后将其调整为较小的大小。由于这种行为,我必须启用setResizeable(true)。
为什么drawImage方法不同? 我怎样才能正确地显示图像,而不需要调整帧的大小

提前感谢你的帮助

编辑:有些人想查看我的代码:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.getContentPane().add(new DrawingSpace());
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

class DrawingSpace extends JComponent {
@Override
protected void paintComponent(Graphics g) {
    super.paintComponents(g);
    Graphics2D g2d = (Graphics2D) g.create();
    URL imageURL = null;
    try {
        imageURL = new URL("http://a.tgcdn.net/images/products/zoom/rubix_cube.jpg");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    Image image = Toolkit.getDefaultToolkit().getImage(imageURL);
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();
}
}

你能给我们看看你调用drawImage的代码吗?@TomJonckheere我添加了代码有人愿意帮助我吗?@TomJonckheere我发布了代码,你没有回应,我想知道你是不是忘了。Avi,我看了你的代码,当我运行它时,图像没有加载。。。我没有忘记,我只是现在没有时间深入研究它…你能给我们看一下你称之为drawImage的代码吗?@TomJonckheere我添加了代码有人愿意帮我吗?@TomJonckheere我发布了代码,你没有回应,我想知道你是不是忘记了。阿维,我看了你的代码,当我运行它时,图像没有加载。。。我没有忘记,我只是现在没有时间深入研究它。。。