用Java绘制图像时有趣的怪癖

时间:2015-07-29 06:12:32

标签: java paintcomponent

看来这个方法:

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();
}
}

0 个答案:

没有答案