图像未显示在JPanel内部

Ume*_*ooq 0 java swing image java-2d jpanel

我想在面板内显示图像.因此,我将图像的路径传递给此方法,打开图像文件并将其传递给专用于在面板内绘制图像的私有类的方法.问题是面板始终保持空白状态,并且不显示任何内容.

这是代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Rei*_*eus 5

paintComponents是一种Container用于绘制容器中每个组件的方法.相反,你需要paintComponent绘制这个单一组件.

改变你的

public void paintComponents(Graphics g)
Run Code Online (Sandbox Code Playgroud)

方法

@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
}
Run Code Online (Sandbox Code Playgroud)

请注意使用@Override注释来帮助进行方法签名检查.

还打电话

super.paintComponent(g);
Run Code Online (Sandbox Code Playgroud)

将更新子组件.


在您的方法中,getImagePath您似乎没有添加DisplayImage到任何容器.相反,您创建一个本地DisplayImage,但不要使用它.