java - JCheckBox数组初始化或访问问题

标签 java arrays swing initialization jcheckbox

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

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};

每当 JCheckBox 的项目状态发生更改时,seatChecker()方法被调用

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

在这里,如果计数达到一定限制,我将禁用 JCheckBox,否则启用它们。这两个方法的代码为

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

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

最佳答案

您声明:

I am getting the error Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at if(seatz[x].isSelected()==false) and seatz[x].setEnabled(true) What am I doing wrong over here?

只有在 Seatz[x] 为空时才会发生这种情况。

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

另一种看待方式是,当您创建对象数组时,就像创建一个鸡蛋盒一样。在先将鸡蛋放入纸箱之前,您不能使用任何鸡蛋。在初始化数组中的任何对象之前,您不能使用它们,这通常是在 for 循环中完成的。

即你需要先这样做:

for (int i = 0; i < myReferenceArray.length; i++) {
  myReferenceArray[i] = new MyReference();
}

然后才能使用数组中的任何项目。


顺便说一句,看到这个:

I am initializing an array of 40 JCheckBoxes as such.

我一直想知道 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};

可以轻松更改为:

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]);
  } 
}

关于java - JCheckBox数组初始化或访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168082/

相关文章:

java - 迭代/递归通过容器和组件来查找给定类的对象?

java - 按下按钮时如何运行另一个类的方法?

python - 获取两个 numpy 数组之间更改数据的索引

javascript - 如何通过比较对象中具有不同元素的两个对象数组来过滤数组?

java - 如何使用paintComponent以不同的方法进行不同的绘图?

java - java 中的简单计算器库(Android)

java - 以下是线程安全的吗? 4个线程写入相同的数据结构

java - 如何调整在 JTextField 中输入的文本的右对齐

java - Android:DatePicker - 跟踪更改日期

java - OnActivityResult 没有被调用