我正在把头发拉出来。很多像这样的问题,但是我无法让它发挥作用。
我正在尝试将图片添加到现有的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()
。但这没有区别。
我错过了什么?
答案 0 :(得分:2)
在这个问题中,问题是缺少revalidate()。但这没有区别。
订单很重要。代码应该是:
panel.add(...);
panel.revalidate();
panel.repaint();
revalidate()调用布局管理器,布局管理器又确定组件的大小和位置。默认情况下,组件的大小为(0,0),因此如果首先调用repaint(),则无需绘制任何内容。
此外,更简单的解决方案是在创建GUI时向面板添加空标签。然后,当您想要添加图像时,您可以这样做:
label.setIcon(...);
setIcon()方法会自动为您执行revalidate()和repaint()。