0
我在三个单独的滚动窗格中有三个列表。当我从第一个项目选择项目到第三个项目时,代码应该用向量动态填充列表。使用另一个列表的选择清除JList监听器不起作用
从理论上讲,如果我从列表1中选择一个项目,列表2将被填充,代码就会生效。如果在列表2中选择某项,列表3将被填充。
该代码还应该可以从列表1中选择另一个项目,填充列表2中的另一组项目并将列表3留空。
下面的代码:
list1 = new JList(vector1);
list2 = new Jlist(vector2);
list3 = new Jlist(vector3);
s1 = new JScrollPane(list1);
s2 = new JScrollPane(list2);
s3 = new JScrollPane(list3);
list1.addListSelectionListener(new OneListener());
list2.addListSelectionListener(new TwoListener());
//add panes to gui and start gui. Listeners are inner classes.
public class OneListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
if(!e.getValueIsAdjusting())
{
//getting a vector from another class called return_value
vector2 = return_value;
vector3.removeAllElements();
list2.setListData(vector2);
list3.setListData(vector3);
s2.repaint();
s3.repaint();
}
}
}
public class TwoListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
if(!e.getValueIsAdjusting())
{
//geting a vector from another class named return_value
vector3 = return_value;
list3.setListData(vector3);
s3.repaint();
}
}
}
,直到我尝试选择列表1,列表2填充列表3的另一个项目这一切工作正常。
OneListener被解雇。
List2更新就好,但列表3保持不变,不会空白/清除列表。
只要触发TwoListener,list3就会相应更新。
此外,控制台抛出在螺纹下面
异常 “AWT-EventQueue的-0” java.lang.ArrayIndexOutOfBoundsException:-1
这不是一个交易断路器,如该程序仍在运行。我想解决这个问题,这样实现就能够继续扩展并得到应用。
'vector2 = return;'不太可能会帮助,因为'return'是一个保留关键字,此时将退出此方法... – MadProgrammer
数值名称为了清楚而改变。 –
由于您正在操作JList内容,因此应该使用DefaultListModels而不是Vectors。一个DefaultListModel用于每个JList。修改DefaultListModels的内容会在JLists中自动触发更改。 –