当我运行程序时,我需要在运行时向GUI添加图像。据我所知,从源文件中获取图像有效:
public ImageIcon getImage()
{
ImageIcon image = null;
if (length > 6.0)
{
//TODO
} else {
try
{
image = new ImageIcon(ImageIO.read( new File("car.png")));
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "An Error occured! Image not found.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
return image;
}
然后我使用JLabel
方法将图像添加到.setIcon()
,但GUI上没有任何变化。
public void addCarImage(Car newCar, int spaceNo)
{
ImageIcon carImage;
carImage = newCar.getImage();
JOptionPane.showMessageDialog(null, "Car", "Car", JOptionPane.INFORMATION_MESSAGE, carImage);
carList[spaceNo - 1] = newCar;
carLabel[spaceNo - 1].setIcon(carImage);
}
添加了JOptionPane
消息,以查看图片是否实际加载,而且确实如此。
有什么想法吗?我已经使用谷歌寻找解决方案,例如repaint()/revalidate()/updateUI()
,但它们无效。
编辑 - carLabels
就像这样添加(在添加图像之前)。 JLabels
最初是空白的。
carLabel = new JLabel[12];
for (int i = 0; i < carLabel.length; i++)
{
carLabel[i] = new JLabel();
}
carPanel.setLayout(new GridLayout(3, 4));
for (int i = 0; i < 12; i++)
{
carPanel.add(carLabel[i]);
}
答案 0 :(得分:3)
请确保在秋千线上进行。 此外,请确保正确加载图像。
这是一个我用来测试的简单代码,很好。
public class Main {
public static void main(String[] args) {
final JFrame frame = new JFrame("TEST");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JLabel label = new JLabel();
ImageIcon icon = null;
try {
icon = new ImageIcon(ImageIO.read(new File("C:\\images\\errorIcon.png")));
} catch (IOException e) {
e.printStackTrace();
}
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(label, BorderLayout.CENTER);
frame.setSize(200,200);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
final ImageIcon finalIcon = icon;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if(finalIcon != null && finalIcon.getImageLoadStatus() == MediaTracker.COMPLETE){
label.setIcon(finalIcon);
}
}
});
}
}
Yarik。
答案 1 :(得分:0)
carLabel [i] .repaint()应该正常工作