Java如何从另一种方法在JPanel上绘制?

时间:2012-02-27 00:31:55

标签: java image swing jpanel paint

我想使用一种方法来获取你想要绘制的内容(getImage()方法)但是我无法弄清楚如何将它绘制到paint方法中。 到目前为止:

public void getImage(String location,int x,int y,int size){
    Image image = new ImageIcon(location).getImage();
    //paint(image); Thats my question
}
public void paint(Graphics g){
}

谢谢:)

2 个答案:

答案 0 :(得分:1)

嗯,你不能轻易做到这一点。然而,你可以做的是通过调用repaint()方法强制重绘,然后在paint方法中绘制新图像。

代码看起来像这样:

private Image someImage;
public void getImage(...)
{
  someImage = new ImageIcon(location).getImage();
  repaint(); //will make java call the paint-method in a moment
}

public void paint(Graphics g)
{
  if(someImage!=null)
    //paint someImage here
}

有一篇关于Painting in AWT and Swing如何运作的长篇文章。请务必阅读非常简短的章节Swing Painting Guidelines,其中包含最重要的内容。

答案 1 :(得分:1)

您需要设置一个从JPanel扩展的类和另一个与其无关的类来描述您要绘制的图像。

假设您有两个类, Window (扩展JPanel)和图像(加载要在JPanel中绘制的图像)

如果要将 Image 中的图像绘制到 Window 类中,则必须在 Window中实例化 Image class。

图像应该有一个方法,可以在 Window 中用于在 Window 中绘制图像,如下所示:

private void drawMe(Graphics g){
    g.drawImage(someImage, x, y, null);
}

并在 Window 类(从JPanel扩展)中我建议您覆盖paintComponent方法,而不是绘制。在该方法中,您应该调用 Image 的drawMe()方法并将Graphics作为参数传递。像这样:

private Image image = new Image("filePath.jpg", 10, 10); //based on the arguments you setup in the contructor

public void paintComponent(Graphics g){
    image.drawMe(g); //access Image's drawMe() method and pass graphics to it
}

所有绘图和图像位置都由 Image 类处理,您使用 Window 类所做的一切都会让它显示在JPanel上。