2017-04-08 114 views
2

我創建了一個將ImageIcon添加到下一個空JLabel的程序,編譯器顯示沒有錯誤,爲什麼這不起作用? setEmptySpace包含一個返回空格的循環,並且getCar方法應該設置圖標。如何將ImageIcon設置爲JLabel數組?

package CarPark; 
//add imports 
import java.awt.Color; 
import java.awt.GridLayout; 
import javax.swing.BorderFactory; 
import javax.swing.ImageIcon; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Park extends JPanel 
{ 

    //declare a JLabel array for parking space 
    JLabel[] parkingSpace; 
    //declare ImageIcon class for cars 
    ImageIcon car; 

    public Park() 
    { 
     //create a new instance of the parking space array with 12 spaces 
     parkingSpace = new JLabel[12]; 
     //populate array 
     for (int i = 0; i < parkingSpace.length; i++) 
     { 
      //create parking space JLabels 
      //parkingSpace[i] = new JLabel(String.valueOf(i + 1)); 
      parkingSpace[i] = new JLabel(); 
      //set parking space colour 
      parkingSpace[i].setBackground(new Color(85, 55, 170)); 
      //make JLabels opaque 
      parkingSpace[i].setOpaque(true); 

     } 

     //create grid for parking space setting rows, columns, horizontal gap and vertical gap 
     this.setLayout(new GridLayout(4, 3, 4, 4)); 
     //set background colour to white 
     this.setBackground(new Color(255, 255, 255)); 

     //add 12 parking spaces to panel 
     for (int i = 0; i < 12; i++) 
     { 
      this.add(parkingSpace[i]); 
      //create a red border with a thickness of 4 pixels 
      parkingSpace[i].setBorder(BorderFactory.createLineBorder(Color.RED, 4)); 
     } 
    } 
    //find an empty parking space 
    int setEmptySpace() 
    { 
     for(int i = 0; i < parkingSpace.length; i++) 
     { 
      if(parkingSpace[i] == null) 
      { 
       return i; 
      } 
     } 
     return -1; 
    } 
    //add car image to empty parking space 
    void getCar(int getEmptySpace) 
    { 
     car = new ImageIcon("car.png"); 

     parkingSpace[getEmptySpace].setIcon(car); 
    } 
} 
+0

歡迎來到SO。你在哪裏使用'getCar'? – c0der

+0

1)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 2)獲取圖像的一種方法是通過[本問答](http://stackoverflow.com/q/19209650/418556)中的圖像進行熱鏈接。 –

+0

我在使用類協作連接的不同類中的動作偵聽器中使用getCar。到目前爲止,我只連接了getCar方法,它看起來像我需要連接setEmptySpace以及它需要一個整數。我必須稍後再做。 – Nebula

回答

1

在此基礎上,從你的構造......

for (int i = 0; i < parkingSpace.length; i++) { 
    //create parking space JLabels 
    //parkingSpace[i] = new JLabel(String.valueOf(i + 1)); 
    parkingSpace[i] = new JLabel(); 
    //set parking space colour 
    parkingSpace[i].setBackground(new Color(85, 55, 170)); 
    //make JLabels opaque 
    parkingSpace[i].setOpaque(true); 
} 

這是不可能出現這種...

int setEmptySpace() { 
    for (int i = 0; i < parkingSpace.length; i++) { 
     if (parkingSpace[i] == null) { 
      return i; 
     } 
    } 
    return -1; 
} 

返回比-1其他任何東西,因爲每一個parkingSpace包含JLabel

我認爲你想要做的,是檢查,看看是否JLabelicon屬性null,例如

int setEmptySpace() { 
    for (int i = 0; i < parkingSpace.length; i++) { 
     if (parkingSpace[i].getIcon() == null) { 
      return i; 
     } 
    } 
    return -1; 
} 
0

我試圖簡化我的代碼到多個方法只能做一兩件事,而不是每一個試圖做每方法多項任務。我想知道的是,setCarIconToLabel()實際上是否將該圖標設置爲JLabel,如果它不怎麼改變。也是這種方法是正確的類型,因爲我不認爲它應該是無效的,但我不知道還有什麼設置它?

//find an empty parking space and return it's number 
int emptySpaceNo() 
{ 

    for(int i = 0; i < parkingSpace.length; i++) 
    { 
     System.out.println("Test method 1 Park P 1"); 
     if(parkingSpace[i].getIcon() == null) 
     { 
      System.out.println("Test method 1 P 2"); 
      return i; 

     } 
    } 
    return -1; 
} 

//return JLabel that is null 
JLabel findEmptySpace() 
{ 
    return parkingSpace[emptySpaceNo()]; 
} 

//create new car image icon 
ImageIcon setCarIcon() 
{ 
    ImageIcon carIcon = new ImageIcon("car.png"); 

    return carIcon; 
} 

//set car icon to JLabel parking space 
void setCarIconToLabel() 
{ 
    findEmptySpace().setIcon(setCarIcon()); 
}