我有一个简单的界面,旨在选择剧院中的一个或多个座位并为自己保留。
我有三列:区域/行/座位。您选择第一个填充第二个,选择第二个填充第三个。
当我第一次选择它们时没有问题。
如果我更改第二排,第三排会重新填充(在这种情况下,所有排都有相同数量的座位)它不会中断!
但是,如果我更改第一行,一切都会中断!
现在原因很清楚,但我不明白为什么会这样。
这是第一个列表事件触发器:
List_Zona.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
if (! arg0.getValueIsAdjusting()){
RowListModel.clear(); // second list
SeatListModel.clear(); // third list
List_Rand.clearSelection(); // second list
List_Scaun.clearSelection(); // third list
int[] rows = self.repository.getRowsForZone(
List_Zona.getSelectedValue().toString()
);
int index = 0;
while (rows[index]!=0) {
RowListModel.addElement(String.valueOf(rows[index]));
index++;
}
}
}
});
它应该清除其他列选择,因此它不应该干扰下一个触发器(第二列),但显然它确实如此,或者发生了一些我没有得到的事情:
List_Rand.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
if (! arg0.getValueIsAdjusting()){
SeatListModel.clear();
int[] seats = self.repository.getSeatByZoneAndRow(
List_Zona.getSelectedValue().toString(),
Integer.parseInt(List_Rand.getSelectedValue().toString())//HERE
);
int index = 0;
while (seats[index]!=0) {
SeatListModel.addElement(String.valueOf(seats[index]));
index++;
}
}
}
});
它无法解析整数,因为第二列应该被清除,但不是吗?但即使它不是......它是?
我想说的是:第二列应该清楚(不是),但如果不是,那么错误就不应该发生,但确实如此。
我希望这有点道理!
谁能发现问题?我应该提供更多代码吗?
错误是第二列的 NullPointerException,因为那里发生了一些可疑的事情(再次:在整数解析中)。
在我看来,当我单击第一列中的一个项目时,第二列valueChanged
根本不应该触发。它应该只是清除其他两个,就是这样。为什么我错了?
PS First Code 片段负责破坏程序的第二个代码片段。
也许我还应该改写这个问题,当我重新选择一个新的“区域”(Zona)时,如何安全地清除所有内容 - 第一列?