2013-04-04 21 views
0

我試圖將我已經在代碼中定義的圖像添加到JLabel,但只有在單擊按鈕時才添加圖像。工作正常使用在ActionListener中添加圖標到JLabel按鈕單擊

kDimLightLabel = new JLabel(dimmable0); 

然後,當我實現ActionListener我有一個按鈕,它會變成

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"); 

在這部分設置它們:

目前,我已經定義爲下面的圖標指示燈亮起,當它打開時,我希望它將圖標設置爲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 位置:類燈具

任何幫助,如何設置以正確的方式圖標將不勝感激!

謝謝!

回答

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") 

它會建議你必須爲每個Lights例如靜態getlightStatus方法。使用非靜態方法將確保每個實例可以擁有它自己的個人lightStatus。還可以使用String#equals來比較String的內容。 ==運營商用於比較Object參考,並且是通常不是你想要的。

+0

非常感謝!這僅僅是因爲它沒有在課堂上宣佈!至於第二點,我會改變它並拍攝,看看它是怎麼回事!雖然非常感謝! :) – Navvy 2013-04-04 15:53:22

+0

不客氣:) – Reimeus 2013-04-04 15:55:08