JCheckBox数组初始化或访问问题

Rae*_*hid 2 java arrays swing initialization jcheckbox

为了使我的程序更短,我使用数组和循环来完成一项任务,但我遇到了问题.我不确定我是在初始化数组错误还是错误地访问它.我正在初始化一个40个JCheckBoxes的数组.

JCheckBox[] seatz={chk_a1,chk_a2,chk_a3,chk_a4,chk_a5,chk_a6,chk_a7,chk_a8,chk_a9,chk_a10,chk_b1,chk_b2...chk_d10};
Run Code Online (Sandbox Code Playgroud)

每当更改JCheckBox的项状态时,seatChecker()都会调用该方法

public void seatChecker(JCheckBox chkbox) {
    if(chkbox.isSelected()){
        chkboxcount=chkboxcount+1;
    } else {
        chkboxcount=chkboxcount-1;
    }
    if(chkboxcount>=totalseats){
        disableSeats();
    } else {
        enableSeats();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果计数达到某个限制,我将禁用JCheckBoxes,否则启用它们.这两种方法的代码是

    public void disableSeats() {
    for(int x = 0; x < 40 ; x++) {
        if(seatz[x].isSelected()==false){
            seatz[x].setEnabled(false);
        }
    }
}

public void enableSeats() {
    for(int x = 0; x < 40 ; x++) {
        seatz[x].setEnabled(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了错误Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionif(seatz[x].isSelected()==false)seatz[x].setEnabled(true)什么是我在这里做错了吗?

Hov*_*els 5

你说:

我得到了错误Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionif(seatz[x].isSelected()==false)seatz[x].setEnabled(true)什么是我在这里做错了吗?

只有当seatz [x]为空时才会发生这种情况.

您似乎声明了一个引用类型数组(此处为JCheckBox),但在使用它们之前尚未为每个数组项构造有效的非null对象.在尝试使用它们之前,必须首先使用对有效非null对象的引用来填充数组.对于任何引用类型数组,这都是相同的.

另一种观察方式是,当您创建一个对象数组时,就像创建一个蛋盒一样.在你先装入一些纸盒之前,你不能使用任何鸡蛋.在初始化数组之前,不能使用数组中的任何对象,这通常在for循环中完成.

即你需要先做到这一点:

for (int i = 0; i < myReferenceArray.length; i++) {
  myReferenceArray[i] = new MyReference();
}
Run Code Online (Sandbox Code Playgroud)

在您可以使用数组中的任何项目之前.


顺便说一句,看到这个:

我正在初始化一个40个JCheckBoxes的数组.

我一直想知道JTable能否更好地满足您的需求.


注意,如果你不能使用JTable,那么这段代码:

JCheckBox[] seatz={chk_a1,chk_a2,chk_a3,chk_a4,chk_a5,chk_a6,chk_a7,chk_a8,chk_a9,chk_a10,chk_b1,chk_b2...chk_d10};
Run Code Online (Sandbox Code Playgroud)

可以很容易地改为:

JCheckBox[][] seats = new JCheckBox[4][10]; // magic numbers replaced by constants
for (int row = 0; row < seats.length; row++) {
  for (int col = 0; col < seats[row].length; col++) {
    seats[row][col] = new Seat();
    seatPanel.add(seats[row][col]);
  } 
}
Run Code Online (Sandbox Code Playgroud)