我希望能够将 Image
绘制到 JFrame
上,但只要我想(不在 JFrame.paint
方法中) .
对于我正在处理的项目,我有一个 class Bullseye extends BufferedImage
,并试图将它放到一个 JFrame
上:
class DrawingFrame extends JFrame {
public void drawImage(Image img, int x, int y) {
getGraphics().drawImage(img,x,y,null);
repaint();
}
}
class Main {
public static void main(String[] args) {
DrawingFrame frame = new DrawingFrame();
Bullseye bullseye = new Bullseye(20,20); //width,height
// later
frame.setVisible(true);
frame.drawImage(bullseye,10,20);
frame.drawImage(bullseye,20,20);
frame.drawImage(bullseye,30,20);
}
}
但是,没有任何显示。经过一些研究,显然这不起作用,因为当我 repaint()
时,对 graphics
对象的更改被清除。
我该怎么做?这是正确的方法吗?
最佳答案
我认为你把问题倒过来了。在 Swing 中,所有绘图操作都应在 paint()
方法中完成。
你可以做的是将你想要绘制的图像作为属性存储在你的类中,然后在你的 pain 方法中,将图像绘制到你想要的任何地方。例如:
class MyFrame extends JFrame {
Image image;
public void paint(Graphics g) {
super.paint(g);
if (image != null) {
g.drawImage(image, /* ... */);
}
}
public void setImage(Image image) {
this.image = image;
repaint();
}
}
在你的其他类(class):
myFrame.setImage(myImage);
关于java - 如何在 JFrame 的 paint() 函数之外绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720331/