【发布时间】:2016-09-28 03:04:30
【问题描述】:
所以我一直在尝试使用 DefaultListModel 更新 JList。现在看了网上的例子,做了一个更新模型的功能。我面临的问题是模型正在更新,但 UI 没有更新,即使在调用 updateUI() 方法之后也是如此。这是我的代码。
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());
}
输出线只是用来调试的。如果我能得到任何帮助,我将不胜感激。提前致谢。
更新
这次我使用了简单的字符串,模型正在更新,因为我打印了大小,但 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 来证明问题。也就是说,创建一个简单的 GUI,其中包含一个 JList 和一个带有操作侦听器的按钮,以将项目添加到模型中。证明简单的代码有效,然后修复你的真实程序。
-
好的,我会尝试,但我在某处读到您不应该直接更新 Vector,而是更新模型。我正在做的是我从一个面板更新矢量,然后将其传递到我正在更新模型的另一个面板。会不会是个问题?
-
是的,您需要更新模型。你还没有发布
SSCCE,所以我无法提供更多建议。 -
我通过直接更新模型而不是更新向量解决了这个问题。感谢您的帮助