繁体   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