2013-04-03 51 views
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

这不是一个交易断路器,如该程序仍在运行。我想解决这个问题,这样实现就能够继续扩展并得到应用。

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

+1

'vector2 = return;'不太可能会帮助,因为'return'是一个保留关键字,此时将退出此方法... – MadProgrammer

+0

数值名称为了清楚而改变。 –

+0

由于您正在操作JList内容,因此应该使用DefaultListModels而不是Vectors。一个DefaultListModel用于每个JList。修改DefaultListModels的内容会在JLists中自动触发更改。 –

回答

0

编辑DefaultListModels而不是包含列表的向量是要走的路。另外,小费。当某个选择的内容抛出一个数组超出范围异常时,“清空”列表。对待它使默认列表选择为0.