为什么 JPanel 不显示 ImageIcon?

Why isn't the JPanel showing the ImageIcon?

我有一个 GridBagConstraints gbcImage 和一个 JLabel 是这样初始化的:

gbcImage.gridx = 1; // column 0
gbcImage.gridy = 2; // row 2
gbcImage.ipady = 100;
gbcImage.ipadx = 100;
JLabel label = new JLabel("", null, JLabel.CENTER);
label.setOpaque(true);
label.setBackground(Color.WHITE);
panel.add(label, gbcImage);

将面板添加到 JFrame

所以我对标签实施了一个MouseListener

public void mouseClicked(MouseEvent e) {
            JFileChooser jfc = new JFileChooser();

            int iRet = jfc.showOpenDialog(panel);
            if (iRet == jfc.APPROVE_OPTION)
            {
                File file = jfc.getSelectedFile();

                try 
                {
                    BufferedImage bi = ImageIO.read(file);
                    image = new ImageIcon(bi);
                    JLabel label = new JLabel("", image, JLabel.CENTER);
                    panel.add(label, gbcImage);
                } 
                catch (IOException e1) 
                {
                    e1.printStackTrace();
                }
            }
        }

但是没有用。图片在运行时不显示在面板中。

我错过了什么?

无需创建新的 JLabel。问题是您向面板添加了一个新标签,但其默认大小为 (0, 0),因为您没有 reavalidate()repaint() 面板。

无需创建新标签。

相反,您保留对原始标签的引用(就像您对面板所做的那样),然后您只需替换图标:

image = new ImageIcon(bi);
label.setIcon( image );