[英]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.