Java 如何将ImageIcon设置为JLabel阵列?
我已经创建了一个程序,将ImageIcon添加到下一个空JLabel中,编译器没有显示任何错误,那么为什么这不起作用呢?setEmptySpace包含一个返回空空间的循环,getCar方法应该设置图标Java 如何将ImageIcon设置为JLabel阵列?,java,arrays,swing,label,imageicon,Java,Arrays,Swing,Label,Imageicon,我已经创建了一个程序,将ImageIcon添加到下一个空JLabel中,编译器没有显示任何错误,那么为什么这不起作用呢?setEmptySpace包含一个返回空空间的循环,getCar方法应该设置图标 package CarPark; //add imports import java.awt.Color; import java.awt.GridLayout; import javax.swing.BorderFactory; import javax.swing.ImageIcon; imp
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);
}
}
package停车场;
//添加导入
导入java.awt.Color;
导入java.awt.GridLayout;
导入javax.swing.BorderFactory;
导入javax.swing.ImageIcon;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类公园延伸至JPanel
{
//为停车位声明JLabel数组
JLabel[]停车场;
//为汽车声明ImageIcon类
图像图标车;
公园()
{
//创建包含12个停车位的停车位阵列的新实例
parkingSpace=新的JLabel[12];
//填充数组
对于(int i=0;i
基于构造器的这一点
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);
}
我已经尝试将代码简化为更多的方法,每个方法只做一件事,而不是尝试每个方法做多个任务。我想知道的是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());
}
//找到一个空停车位并返回其编号
int emptySpaceNo()
{
对于(int i=0;i
欢迎来到SO。你在哪里使用getCar
?1)要更快地获得更好的帮助,请发布或。2) 例如,获取图像的一种方法是热链接到中看到的图像。我在使用类协作连接的另一个类中的操作侦听器中使用getCar。到目前为止,我只连接了getCar方法,看起来我需要连接setEmptySpace,因为它需要一个整数。稍后我必须这样做。我正在尝试使用refCar.getCar(refCar.setEmptySpace());在另一个类中作为引用变量传递,但它们在actionPerformed方法中似乎不起作用,从而导致空指针异常。这是为什么?我如何解决?
int setEmptySpace() {
for (int i = 0; i < parkingSpace.length; i++) {
if (parkingSpace[i].getIcon() == null) {
return i;
}
}
return -1;
}
//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());
}