单击按钮,在ActionListener中向JLabel添加图标

时间:2013-04-04 15:35:20

标签: java swing jbutton jlabel imageicon

我正在尝试将我已在代码中定义的图像添加到JLabel,但仅在单击按钮时才会添加。

目前,我已将图标定义如下:

    public class Lights extends JPanel implements ActionListener
    {
        public Lights()
        {
            //Dimmable light icons
            ImageIcon dimmable0 = createImageIcon("images/Dimmer0.png");
            ImageIcon dimmable1 = createImageIcon("images/Dimmer1.png");
            ImageIcon dimmable2 = createImageIcon("images/Dimmer2.png");
            ImageIcon dimmable3 = createImageIcon("images/Dimmer3.png");

使用

在此部分中设置它们可以正常工作
    kDimLightLabel = new JLabel(dimmable0);

然后当我实现ActionListener时,我有一个按钮可以打开灯,当它打开时,我希望它将图标设置为dimmable3图标。目前它代表:

    public void actionPerformed(ActionEvent e)
{
    if(e.getSource() == kLightOn)
    {
        if(Lights[0].getlightStatus() == "Off")
        {
            Lights[0].setlightStatus("On");
            kLightOnOffLabel.setText(Lights[0].getlightStatus());
            kLights.setValue(3); //sets slider as lights go on or off
            dimmableLights[0].setdimLevel(3); //sets array value
            kDimLightLabel.setIcon(dimmable3); //sets label image
        }
    }

当我运行它时,我会得到12个错误,12个按钮中的每个按钮都有相同的行!

kDimLightLabel.setIcon(dimmable3); //设置标签图片                                        ^   符号:变量dimmable3   location:class Lights

非常感谢任何有关如何以正确方式设置图标的帮助!

谢谢!

1 个答案:

答案 0 :(得分:2)

您的代码会建议变量dimmable3仅在构造函数Lights的范围内可用。尝试在课程级别上提供所有ImageIcon变量。

public class Lights extends JPanel implements ActionListener {
   private ImageIcon dimmable0; // initialize in constructor
   ...
   public Lights() {
      dimmable0 = createImageIcon(...);
      ...

除此之外,这看起来很可疑:

if (Lights[0].getlightStatus() == "Off")

建议您为每个getlightStatus实例使用静态Lights方法。使用非静态方法将确保每个实例都拥有自己的个人lightStatus。同时使用String#equals来比较String内容。 ==运算符用于比较Object引用,通常不是您想要的。