用户单击clickme按钮时需要显示图像

时间:2013-01-06 19:02:43

标签: java image swing jlabel actionlistener

当用户单击按钮时,我需要在标签中显示图像。我在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");
        }
    });

1 个答案:

答案 0 :(得分:4)

我对你的代码感到有点困惑,你谈到将图像添加到JLabel,但代码显示你添加了一个变量mButton并设置了它的图标,这让我觉得它{{1 }}?

无论哪种方式JButton / JLabel已添加到容器中,还是动态添加?

1)如果可见容器中尚未显示JButton / JLabel

在可见容器上添加/删除或更改组件的大小/布局后,您应该在容器实例上调用JButtonrevalidate()以反映更改:

repaint()

2)如果//code which adds component to visible panel_1 //so changes can be reflected panel_1.revalidate(); panel_1.repaint(); / JLabel可见,JButton应该可以正常工作setIconrevalidate()本身,如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在此处查看更多内容: