Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何从另一种方法中利用JPanel?_Java_Image_Swing_Jpanel_Paint - Fatal编程技术网

Java如何从另一种方法中利用JPanel?

Java如何从另一种方法中利用JPanel?,java,image,swing,jpanel,paint,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){ }

我想使用一个方法来获取您试图绘制的内容(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){
}

谢谢:)

嗯,你做这件事不容易。但是,您可以通过调用该方法强制重新绘制,然后在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
}

有一篇关于工作原理的长篇文章。请务必阅读包含最重要外卖的非常简短的一章。

您需要设置一个从JPanel扩展而来的类和另一个与之无关的类,该类描述您试图绘制的图像

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

如果要将图像从image绘制到Window类中,必须在Window类中实例化image

图像中应包含一种方法,可在窗口中使用该方法在窗口中绘制图像,如下所示:

在Window类(从JPanel扩展而来)中,我建议您重写paintComponent方法,而不是paint。在该方法中,您应该调用Image的drawMe()方法并将图形作为参数传递。像这样:

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上。

您不应该在JPanel的
paint(…)
方法中绘制任何东西,而应该使用它的
paintComponent(…)
方法。如果您想成功完成此操作,您需要阅读教程。
x
y
size
参数的具体含义是什么?为了更快地获得更好的帮助,请发布一个。无论OP请求什么,您都希望将其更改为paintComponent方法,而不是paint。是的,这是一个非常有效的注释。我链接到的指南中也描述了这一点。我只是尽量靠近原始代码片段。为什么我必须使用paintComponent?paint()调用了其他三个方法来创建JFrame如果您自己重写paint(),可能会导致其他未知问题:
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
}