2013-04-03 53 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.