java - 图像未在 JPanel 内显示

标签 java image swing jpanel java-2d

我想在面板内显示图像。因此,我将图像的路径传递给此方法,打开图像文件并将其传递给专用于在面板内绘制图像的私有(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);
    }
}

我错过了什么?

最佳答案

paintComponentsContainer 的一个方法,用于绘制容器中的每个组件。相反,您需要 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/

相关文章:

java - 删除所有不可打印字符的正则表达式

Java重写疑问

java - 搜索保存在文件中的 ArrayList 中的数据并将其打印在文本字段中

java - 网格布局 View Java Swing 组件位置

Java Scanner 类读取一行然后停止

java - 在 Java TreeMap 中加速顺序放置

iphone - 最有效的图像更新方法

iphone - 在 Facebook 连接 iphone 上上传图像

javascript - CKEditor 图像宽度和高度作为 HTML 属性而不是内联样式

java - 为什么我的 JButtons 在放入 JPanel 的构造函数时不显示?