当用户单击按钮时,我需要在标签中显示图像。我在ActionListener中编写了一些代码,但它没有工作
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ImageIcon one = new ImageIcon("E:\\image1.jpg");
panel_1.setLocation(20, 100);
panel_1.setSize(115, 115);
mbutton.setIcon(one);
panel_1.add(mbutton);
// mbutton.setText("You changed me");
}
});
答案 0 :(得分:4)
我对你的代码感到有点困惑,你谈到将图像添加到JLabel
,但代码显示你添加了一个变量mButton
并设置了它的图标,这让我觉得它{{1 }}?
无论哪种方式JButton
/ JLabel
已添加到容器中,还是动态添加?
1)如果可见容器中尚未显示JButton
/ JLabel
:
在可见容器上添加/删除或更改组件的大小/布局后,您应该在容器实例上调用JButton
和revalidate()
以反映更改:
repaint()
2)如果//code which adds component to visible panel_1
//so changes can be reflected
panel_1.revalidate();
panel_1.repaint();
/ JLabel
可见,JButton
应该可以正常工作setIcon
和revalidate()
本身,如repaint()
所示(JLabel#setIcon
是相同的):
JButton
因此其他东西是错误的,就像您的LayoutManager没有正确支持新组件的添加,因此它不会被放置在可见空间中,请发布SSCCE。
此外,我发现您正在使用 * 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
和setSize(..)
,因此我觉得您使用setLocation(..)
/ Absolute
null
这是不推荐的,会造成很多问题。而是使用适当的LayoutManager
在此处查看更多内容: