我有一个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创建在飞行