[英]Multiple JList selected indexes breaking each other
我有一个简单的界面,旨在选择剧院中的一个或多个座位,并为自己保留座位。
我有三列:区域/行/座位。 您选择第一个填充第二个,然后选择第二个填充第三个。
当我第一次选择它们时,没问题。
如果更改第二行,则第三行会重新填充(在这种情况下,所有行都具有相同的座位数),它不会中断!
但是,如果我更改第一行,一切都会中断!
现在,这样做的原因已经很清楚了,但我不知道为什么会这样。
这是第一个列表事件触发器:
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)-第一列时,如何安全地清除所有内容?
第一个侦听器清除List_Rand
的选择。 这使选择发生变化:它从“选择索引i”到“未选择索引”,因此调用了第二个侦听器。 在第二个侦听器中,您尝试对List_Rand
的选定值调用一个方法。 由于您只是清除选择,因此不再有选择的值,因此NullPointerException。
旁注:您的代码很难阅读,因为它不遵守Java命名约定。 变量以小写字母开头,并且被驼峰化(名称中没有下划线)。
其他说明:调用parseInt(selectedValue.toString())
什么意义? 如果列表包含Integer实例,则将值直接转换为Integer。 如果它包含String,那么为什么不存储Integers,因为这是您希望列表包含的内容?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.