2012-10-25 30 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) { 

     } 
    } 

爲,intervalAdded被稱爲每當我想從一個的mouseClicked監聽器添加元素,如

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()listModel.add(GlobalVariable.i,message);
  2. 當你調用jList1.setListData(a);你是隱式創建和jList1設置新的ListModel的。因此,當您修改listModel時,它不反映在您的jList1上。
  3. GlobalVariable - >看起來像一些古代C代碼風格的標誌。相反地​​使用對象。
+0

謝謝!我刪除了MyDataListListener,沒有使用它。只需在messagereceived函數中添加'listModel.add(any_item)'即可。它會自動添加項目列表。 – akshaykumar6

相關問題