2012-10-25 1 views
1

이벤트 리스너가 아닌 사용자 정의 함수에서 JList에 요소를 추가하려고합니다. EventListener없이 프로그래밍 방식으로 JList에 요소를 추가하는 방법은 무엇입니까?

나는 JList의이 같은 :

DefaultListModel listModel = new DefaultListModel(); 
JList jList1 = new JList(listModel); 
listModel.add(0,"Welcome"); 
listModel.addListDataListener(new MyListDataListener()); 

class MyListDataListener implements ListDataListener { 
     public void contentsChanged(ListDataEvent e) { 
      //DefaultListModel model = (DefaultListModel)e.getSource(); 
      //jList1.setModel(listModel); 
      System.out.println("inside content"); 
     } 
     public void intervalAdded(ListDataEvent e) { 
      // jList1.setModel(listModel); 
      jList1.setListData(a); 
      //System.out.println("inside added"+e.getSource()+" "+jList1.getModel()); 

     } 
     public void intervalRemoved(ListDataEvent e) { 

     } 
    } 

나는의 mouseClicked 리스너에서 요소를 추가 할 때마다, intervalAdded이 불리는 것을, 내 사용자 정의 함수에서도

private void sendButtonMouseClicked(java.awt.event.MouseEvent evt) {           
     // TODO add your handling code here: 
     if(!inputField.getText().isEmpty()) 
     { 
      message=myName+" : "+inputField.getText(); 


     listModel.add(GlobalVariable.i,message); 


     inputField.setText(null); 
     GlobalVariable.i++; 
     } 

    } 

public void messagereceived(String s) 
    { 
       listModel.add(GlobalVariable.i,message); 
       GlobalVariable.i++; 
} 

입니다하지만 호출 할 때마다 listModel.setmodel()이 작동하지 않습니다 messagereceived() 함수에서.

이 함수에서 JList에 요소를 어떻게 추가합니까?

+0

'messagereceived'가'Event Dispatching Thread'에서 모델을 업데이트하는지 확인하십시오. – MadProgrammer

답변

2
  1. messagereceived에서는 listModel.setmodel()하지만
  2. 당신이 jList1.setListData(a); 암시 적으로 작성하고 jList1에 새의 ListModel를 설정하는 전화 listModel.add(GlobalVariable.i,message);를 호출하지 않습니다. 따라서 listModel을 수정하면 귀하의 jList1에 반영되지 않습니다.
  3. GlobalVariable -> 고대 C 코드 스타일의 기호처럼 보입니다. 대신 개체를 적절히 사용하십시오.
+0

감사합니다 !! MyDataListListener를 제거 했으므로 사용할 수 없습니다. messagereceived 함수에 'listModel.add (any_item)'을 추가하기 만하면됩니다. 목록에 항목이 자동으로 추가됩니다. – akshaykumar6