使用另一个List的Selection Listener清除JList不起作用

时间:2013-04-03 03:54:53

标签: java swing user-interface jlist indexoutofboundsexception

我在三个单独的滚动窗格中有三个列表。当我从第一个到第三个选择项目时,代码应该用向量动态填充列表。

从理论上讲,如果我从列表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();
        }
    }
}

一切正常,直到我尝试从list1,list2和list 3中选择另一个项目。

OneListener被解雇了。

List2更新很好但列表3保持不变,不会空白/清除列表。

一旦触发了TwoListener,list3就会相应地更新。

此外,控制台抛出以下内容

  

线程“AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:-1

这不是交易破坏者,因为程序仍在运行。我想解决这个问题,以便实现可以延长并继续使用。

我尝试实施thisthis。他们没有工作。

1 个答案:

答案 0 :(得分:0)

编辑DefaultListModels而不是包含列表的向量是可行的方法。还有,小费。当您选择某些内容时“清空”列表时会抛出一个数组超出范围的异常。将默认列表选择设为0来对待它。