2016-09-28 73 views
0

所以我一直在嘗試使用DefaultListModel更新JList。現在我已經看到了在線示例並提供了更新模型的功能。我面臨的問題是即使在調用updateUI()方法之後,模型正在更新,但不是UI。這是我的代碼。JList更新UI

public void updateAthleteList() { 

System.out.println("Trying to update"); 
//call updateUI() for the JList object 
athletesModel.clear(); 
System.out.println(athleteList.size()); 
for(int i = 0; i < athleteList.size(); i++) { 

    System.out.println("Inside loop"); 
    athletesModel.addElement(((Athlete) athleteList.get(i)).toStringCount()); 
} 

athletesList.updateUI(); 
System.out.println(athletesModel.size()); 
System.out.println(athletesList.getModel().getSize()); 
} 

輸出線只是在那裏調試。如果我能得到任何幫助,我將非常感激。提前致謝。

UPDATE

我與簡單的字符串工作這一次,當我打印出來的尺寸,但仍處於JList中沒有變化的模型正在更新。這裏是我的代碼

public void updateAthleteList(Athlete newAthlete) 
{ 
    System.out.println("Trying to update"); 
    //call updateUI() for the JList object 
    DefaultListModel tempModel = (DefaultListModel)athletesList.getModel(); 
    tempModel.addElement("hij"); 
    System.out.println(athletesList.getModel().getSize()); 
    athletesList.setModel(tempModel); 
    athletesList.updateUI(); 
    System.out.println(athletesList.getModel().getSize()); 
} 
+1

從未有任何需要調用updateUI()方法。你所需要做的就是更新模型。如果JList沒有更新,那麼這意味着1)該模型不屬於顯示在您的框架上的JList,或者2)您沒有更新事件派發線程上的模型。問題出在您未發佈的代碼中。發佈一個合適的[SSCCE](http://sscce.org/)來說明問題。也就是說,創建一個帶JList的簡單圖形用戶界面和一個帶動作監聽器的按鈕,以將項目添加到模型中。證明簡單的代碼工作,然後修復你的真實程序。 – camickr

+0

好吧,我會嘗試,但我讀的地方,你不應該直接更新向量,而是更新模型。我正在做的是我從一個面板更新矢量,然後將其傳遞到其他面板,我正在更新模型。這可能是一個問題嗎? – anonymousCoder

+0

是的,你需要更新模型。您尚未發佈「SSCCE」,因此我無法提供任何更多建議。 – camickr

回答

0

設置模型JList的某處?或許在其構造

JList s = new JList(); 
DefaultListModel x = (DefaultListModel) s.getModel(); // 

或他的後

//change athletesList.updateUI(); 
jList.setModel(athletesModel); 
+0

抱歉沒有運氣。我確實在構造函數中設置了模型,我不認爲這是問題。當我更新我的模型時,我調用函數athletesList.getModel()。getSize()它給了我正確的模型大小,但不更新UI – anonymousCoder

+0

他試圖重繪? – DarkFenix

+1

沒有必要使用重繪()。當你更新模型時,JList將自動重新繪製自己。 – camickr