2

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

1 回答 1

4

我对您所说的将图像添加到 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#setIconJButton是相同的):

     * 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这是不推荐的,可能会导致很多问题。而是使用适当的LayoutManagersee here了解更多信息:

于 2013-01-06T19:38:04.807 回答