簡體   English   中英

多個JList選定索引彼此中斷

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM