Java 图像未显示在JPanel内部
我想在面板内显示图像。所以我将图像的路径传递给这个方法,打开图像文件并将其传递给一个专用于在面板内绘制图像的私有类的方法。问题是面板一直是空的,不显示任何内容 代码如下:Java 图像未显示在JPanel内部,java,image,swing,jpanel,java-2d,Java,Image,Swing,Jpanel,Java 2d,我想在面板内显示图像。所以我将图像的路径传递给这个方法,打开图像文件并将其传递给一个专用于在面板内绘制图像的私有类的方法。问题是面板一直是空的,不显示任何内容 代码如下: JPanel ImagePane; // I want to add image to this public void getImagePath(String Path) { BufferedImage image = null; try { image=Image
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
是容器的一种方法,用于绘制容器中的每个组件。相反,您需要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
添加到任何容器中。相反,您可以创建一个本地显示图像,但不使用它。您必须覆盖它
但是在您的代码中,您正在创建公共组件(图形g)
,这是不正确的使用了@Override
注释。如果您习惯于在重写方法时使用它,那么这个问题可以在编译时解决。您需要使用以下选项:
@Override
public void paintComponent(Graphics g)
可能是尺寸问题。DisplayImage
的父容器的布局是什么?在方法getImagePath
中,您似乎没有将DisplayImage
添加到任何容器中……当我将image
添加到面板时,它会显示添加容器。那么我应该添加什么?然后您需要将面板添加到您的容器中。看起来像add(display)代码>。当您使用GroupLayout
时,这将不是确切的语法。考虑发布一个实际上我正在学习的Windows Builder。所以我已经在那里创建了一个JPanel,我想在其中添加这个图像。
@Override
public void paintComponent(Graphics g)