JLabel图标抵制改变



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

代码如下(panelMain houses 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();

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

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

  • 在某些情况下,在JLabel中重新绘制Icon存在问题(来自外部来源,www网站等),然后您必须调用,

myIcon.getImage().flush();
myLabel.setIcon(myIcon);
  • 使用CardLayout与几个视图,然后任何动作只是在卡之间切换
否则

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

  • 为了更好的帮助,更快地发布一个SSCCE,短的,可运行的,可编译的,只是关于JFrame与JLabel包含ImageIcon/Icon创建在飞行

最新更新