为什么 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 );
我有一个 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 );