2016-09-28 72 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