Java将图像添加到JPanel。为什么图像没有显示?

时间:2014-10-19 21:30:56

标签: java swing jpanel jlabel

我正在把头发拉出来。很多像这样的问题,但是我无法让它发挥作用。

我正在尝试将图片添加到现有的JPanel中。问题是让图像在JPanel中可见。代码运行,但图像无处..

这是我的代码:

private void loadImgBtnActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:      
    int returnVal = fileChooser.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION)
    {

        File file = fileChooser.getSelectedFile();
        BufferedImage myPicture = null;
        try {
            myPicture = ImageIO.read(file);
        } catch (IOException ex) {
            Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
        }
        JLabel picLabel = new JLabel(new ImageIcon(myPicture));
        imagePnl2.add(picLabel);
        imagePnl2.repaint();
        imagePnl2.revalidate();

    }
    else
    {
        System.out.println("File access cancelled by user.");
    }

}

this question中,问题是缺少revalidate()。但这没有区别。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

  

在这个问题中,问题是缺少revalidate()。但这没有区别。

订单很重要。代码应该是:

panel.add(...);
panel.revalidate();
panel.repaint();

revalidate()调用布局管理器,布局管理器又确定组件的大小和位置。默认情况下,组件的大小为(0,0),因此如果首先调用repaint(),则无需绘制任何内容。

此外,更简单的解决方案是在创建GUI时向面板添加空标签。然后,当您想要添加图像时,您可以这样做:

label.setIcon(...);

setIcon()方法会自动为您执行revalidate()和repaint()。