所以我一直在嘗試使用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());
}
從未有任何需要調用updateUI()方法。你所需要做的就是更新模型。如果JList沒有更新,那麼這意味着1)該模型不屬於顯示在您的框架上的JList,或者2)您沒有更新事件派發線程上的模型。問題出在您未發佈的代碼中。發佈一個合適的[SSCCE](http://sscce.org/)來說明問題。也就是說,創建一個帶JList的簡單圖形用戶界面和一個帶動作監聽器的按鈕,以將項目添加到模型中。證明簡單的代碼工作,然後修復你的真實程序。 – camickr
好吧,我會嘗試,但我讀的地方,你不應該直接更新向量,而是更新模型。我正在做的是我從一個面板更新矢量,然後將其傳遞到其他面板,我正在更新模型。這可能是一個問題嗎? – anonymousCoder
是的,你需要更新模型。您尚未發佈「SSCCE」,因此我無法提供任何更多建議。 – camickr