2017-04-08 107 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()); 
}