我有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();
}
}
}
但它没有用。在运行时,图像不会显示在面板中。
我错过了什么?
答案 0 :(得分:3)
无需创建新的JLabel。问题是您向面板添加了新标签,但其默认大小为(0,0),因为您没有reavalidate()
和repaint()
面板。
无需创建新标签。
相反,您保留对原始标签的引用(就像您对面板所做的那样),然后您只需替换图标:
image = new ImageIcon(bi);
label.setIcon( image );