1

我有一个 JLabel 图标,我只能看到一次更改。空白时,以下代码的新设置图像可以正常工作。但在那之后,图像被卡住了。没有新的图像可以取代它。当我在没有 revalidate() 的情况下在 panelPainting 上使用 repaint 时,我根本没有得到任何图片。这也很奇怪。

这是代码,(panelMain 房屋 panelPainting)

//get image from somewhere
JLabel imageLabel = new JLabel();
Icon imageIcon = new ImageIcon(image);
imageLabel.setIcon(imageIcon);

panelPainting.setAlignmentX(JLabel.CENTER);
panelPainting.add(imageLabel);  // default center section

//my insanity starts here
panelPainting.revalidate();

panelMain.remove(panelPainting);
panelMain.revalidate();

编辑:我仔细检查了图像每次都会改变。

4

1 回答 1

4
  • 作为标准方式使用JLabel.setIcon(),则没有理由JComponents在运行时删除、修改和添加新的

  • Icon在某些情况下JLabel(从外部来源、www 网站等)重新绘制存在问题,那么您必须致电,

myIcon.getImage().flush();
myLabel.setIcon(myIcon);
  • 使用 CardLayout 和几个视图,那么任何动作都只是在卡片之间切换

除此以外

  • 必须调用container.revalidate()and container.repaint(),作为最后的代码行,一次,在所有更改完成后

  • 为了获得更好的帮助,请尽快发布SSCCE,简短,可运行,可编译,几乎带有 JLabel 的 JFrame 包含动态创建的 ImageIcon / Icon

于 2013-04-03T08:07:47.053 回答