我对您所说的将图像添加到 a 的代码感到有些困惑,JLabel
但代码显示您添加了一个变量mButton
并设置了它的图标,这让我觉得它JButton
?
无论哪种方式,JLabel
/JButton
已经添加到容器中还是动态添加?
1) 如果JLabel
/JButton
不存在于可见容器中:
在可见容器上添加/删除或更改组件的大小/布局后,您应该调用revalidate()
容器repaint()
实例以反映更改:
//code which adds component to visible panel_1
//so changes can be reflected
panel_1.revalidate();
panel_1.repaint();
2)如果JLabel
/JButton
是可见setIcon
的,它应该像它调用的那样工作,revalidate()
并且它repaint()
本身从这里看到的JLabel#setIcon
(JButton
是相同的):
* 108: getfield #294 // Field defaultIcon:Ljavax/swing/Icon;
* 111: invokeinterface #346, 1 // InterfaceMethod javax/swing/Icon.getIconHeight:()I
* 116: aload_2
* 117: invokeinterface #346, 1 // InterfaceMethod javax/swing/Icon.getIconHeight:()I
* 122: if_icmpeq 129
* 125: aload_0
* 126: invokevirtual #319 // Method revalidate:()V
* 129: aload_0
* 130: invokevirtual #318 // Method repaint:()V
因此还有其他问题,例如您的 LayoutManager 没有正确支持添加新组件,因此它没有被放置在可见空间中,请发布SSCCE。
我也看到你在使用setSize(..)
,setLocation(..)
所以我觉得你在使用Absolute
/null
LayoutManager
这是不推荐的,可能会导致很多问题。而是使用适当的LayoutManager
see here了解更多信息: