2013-12-17 3 views
0

그래서 현재 간단한 Javaspace 주제 보드를 사이드 프로젝트로 만들려고합니다. 주제와 메시지를 텍스트 필드에서 두 개의 별도로 추가 할 수있는 기본 인터페이스가 있습니다 DefaultListModel 내 질문은이 :간단한 Jlist 주제 보드

Jlist1에서 선택 목록을 사용하여 요소를 선택하면 특정 요소에 대해 Jlist2의 인스턴스를 열 수 있습니까? 그런 다음 주제에 대한 메시지를 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); 
     } 
    } 

}