为什么JPanel没有显示ImageIcon?

时间:2016-08-26 21:04:56

标签: java image swing jlabel mouselistener

我有GridBagConstraints gbcImageJLabel,其初始化如下:

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();
                }
            }
        }

但它没有用。在运行时,图像不会显示在面板中。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

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

无需创建新标签。

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

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