JList更新UI
所以我一直在尝试使用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());
}
设置模型JList的某处?或许在其构造
JList s = new JList();
DefaultListModel x = (DefaultListModel) s.getModel(); //
或他的后
//change athletesList.updateUI();
jList.setModel(athletesModel);
抱歉没有运气。我确实在构造函数中设置了模型,我不认为这是问题。当我更新我的模型时,我调用函数athletesList.getModel()。getSize()它给了我正确的模型大小,但不更新UI – anonymousCoder
他试图重绘? – DarkFenix
没有必要使用重绘()。当你更新模型时,JList将自动重新绘制自己。 – camickr
从未有任何需要调用updateUI()方法。你所需要做的就是更新模型。如果JList没有更新,那么这意味着1)该模型不属于显示在您的框架上的JList,或者2)您没有更新事件派发线程上的模型。问题出在您未发布的代码中。发布一个合适的[SSCCE](http://sscce.org/)来说明问题。也就是说,创建一个带JList的简单图形用户界面和一个带动作监听器的按钮,以将项目添加到模型中。证明简单的代码工作,然后修复你的真实程序。 – camickr
好吧,我会尝试,但我读的地方,你不应该直接更新向量,而是更新模型。我正在做的是我从一个面板更新矢量,然后将其传递到其他面板,我正在更新模型。这可能是一个问题吗? – anonymousCoder
是的,你需要更新模型。您尚未发布“SSCCE”,因此我无法提供任何更多建议。 – camickr