2013-12-17 27 views
0

所以我目前正在嘗試創建一個簡單的Javaspace Topic Board作爲一個側面項目,爲此我有一個基本的交互面,允許從文本字段添加主題和消息到兩個分開的DefaultListModel s ,我的問題是這樣的:Simple Jlist Topic Board

是否有使用SelectionListener中,打開的Jlist2實例爲特定的元素從Jlist1選擇一個元素時什麼辦法?然後,必須在Jlist1中顯示該主題的消息,在Jlist1中選擇另一個主題反之亦然。

對於缺少代碼我很抱歉,這是由於技術問題,關於一個小孩,果汁和我的舊系統。

回答

0

這個怎麼樣?您在第一個列表中聆聽選擇,並根據以下內容更改第二個列表的型號:

public class AbcFrame extends javax.swing.JFrame { 
    // map linking items in the first lists with items in the second list 
    private final Map<String,ListModel> map = new HashMap<>(); 
    private javax.swing.JList jList1; 
    private javax.swing.JList jList2; 

    public AbcFrame() { 
     initComponents(); // create and place the lists in the frame 

     map.put("itemA", new MyListModel(Arrays.asList("a_1", "a_2", "a_3"))); 
     map.put("itemB", new MyListModel(Arrays.asList("b_1", "b_2"))); 

     jList1.setModel(new MyListModel(Arrays.asList("itemA", "itemB"))); 

     // when the selection of the first list changes, change the model of the second list 
     jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() { 
      public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 
       String item = (String) jList1.getSelectedValue(); 
       ListModel model2 = map.get(item); 
       jList2.setModel(model2); 
      } 
     }); 
    } 

    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {          
     String item = (String) jList1.getSelectedValue(); 
     ListModel model2 = map.get(item); 
     jList2.setModel(model2); 

    }         

    // a simple list model wrapping a java.util.List 
    private static class MyListModel extends AbstractListModel { 
     private final java.util.List<String> items; 

     public MyListModel(java.util.List<String> items) { 
      this.items = items; 
     } 

     @Override 
     public int getSize() { 
      return items.size(); 
     } 

     @Override 
     public Object getElementAt(int index) { 
      return items.get(index); 
     } 
    } 

}