我想在面板内显示图像。因此,我将图像的路径传递给此方法,打开图像文件并将其传递给专用于在面板内绘制图像的私有(private)类的方法。问题是面板始终为空并且不显示任何内容。
这是代码:
JPanel ImagePane; // I want to add image to this
public void getImagePath(String Path)
{
BufferedImage image = null;
try
{
image=ImageIO.read(new File(Path));
}
catch (IOException e)
{
e.printStackTrace();
}
DisplayImage display= new DisplayImage();
display.getImage(image);
}
private class DisplayImage extends JPanel
{
private BufferedImage image=null;
public void getImage(BufferedImage im)
{
image=im;
repaint();
}
public void paintComponents(Graphics g)
{
g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
}
}
我错过了什么?
最佳答案
paintComponents
是Container
的一个方法,用于绘制容器中的每个组件。相反,您需要 paintComponent
来绘制这个单个组件。
改变你的
public void paintComponents(Graphics g)
方法
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
}
请注意使用 @Override
注释来帮助进行方法签名检查。
同时调用
super.paintComponent(g);
将更新子组件。
<小时/>在您的方法 getImagePath
中,您似乎没有将 DisplayImage
添加到任何容器。相反,您创建一个本地 DisplayImage
,但不使用它。
关于java - 图像未在 JPanel 内显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458697/