更改 JList 模型时 JscrollPane 不更新(Java 摆动)
JscrollPane doesn't update when changing JList model (Java swing)
我有一个带有自定义 DefaultListModel 的 JList。 JList 位于 JTabbedPane 内的 JScrollPane 内。当我通过添加或删除元素来更新模型时,即使模型已正确更改,我也看不到页面上有任何变化。
我尝试重新验证 () 和重新绘制 () 一切,但它没有改变。
有趣的事情来了。如果我用 for (int i = 0; i < model.size(); i++) model.get(i) 打印模型中的所有内容,它只会显示修改后的列表。
但是,如果我通过将列表 public 放入我的自定义模型中,则没有任何更改。
仅当我使用我手动填充的另一个列表创建和设置新模型时,我才能查看更新的列表。
TLDR;
在使用 addElement 和 removeElement 修改自定义 DefaultListModel 中的列表后,如何显示修改后的列表:
for (int i = 0; i < model.size(); i++) {
System.out.println(model.get(i));
}
这显示了原始列表,因此未更新视图
for (Object object : model.list) {
System.out.println(object);
}
我的默认列表模型class
public class ObjectListModel extends DefaultListModel
{
final List<Object> list;
public ObjectListModel(List<Object> list) {
this.list = list;
}
@Override
public int getSize() {
return list.size();
}
@Override
public Object getElementAt(int index) {
return list.get(index);
}
}
这是错误的:
public class ObjectListModel extends DefaultListModel
{
final List<Object> list; // <===== this here
DefaultListModel 已经有支持模型的数据核心,因此您的列表字段忽略并尝试覆盖它,但未成功。
关于:
After modifying list in custom DefaultListModel with addElement and removeElement how can this shows the modified list :
并且调用这些方法会修改DefaultListModel默认持有的数据核,不会对自己的list字段有丝毫的改变。
我建议您要么摆脱列表字段,而是将数据传递给超级对象,如果需要,包括它的构造函数,或者扩展 AbstractListModel 然后确定使用您自己的数据核心。如果您确实使用派生的 AbstractListModel class,则必须注意在模型更改时正确调用通知方法,DefaultListModel 会为您处理这些事情。
老实说,根据您发布的内容,除非您有问题中未提及的要求,否则我不确定您是否需要扩展 DefaultListModel 或 AbstractListModel,而是简单地使用 DefaultListModel 作为-是。
我有一个带有自定义 DefaultListModel 的 JList。 JList 位于 JTabbedPane 内的 JScrollPane 内。当我通过添加或删除元素来更新模型时,即使模型已正确更改,我也看不到页面上有任何变化。
我尝试重新验证 () 和重新绘制 () 一切,但它没有改变。
有趣的事情来了。如果我用 for (int i = 0; i < model.size(); i++) model.get(i) 打印模型中的所有内容,它只会显示修改后的列表。 但是,如果我通过将列表 public 放入我的自定义模型中,则没有任何更改。
仅当我使用我手动填充的另一个列表创建和设置新模型时,我才能查看更新的列表。
TLDR;
在使用 addElement 和 removeElement 修改自定义 DefaultListModel 中的列表后,如何显示修改后的列表:
for (int i = 0; i < model.size(); i++) {
System.out.println(model.get(i));
}
这显示了原始列表,因此未更新视图
for (Object object : model.list) {
System.out.println(object);
}
我的默认列表模型class
public class ObjectListModel extends DefaultListModel
{
final List<Object> list;
public ObjectListModel(List<Object> list) {
this.list = list;
}
@Override
public int getSize() {
return list.size();
}
@Override
public Object getElementAt(int index) {
return list.get(index);
}
}
这是错误的:
public class ObjectListModel extends DefaultListModel
{
final List<Object> list; // <===== this here
DefaultListModel 已经有支持模型的数据核心,因此您的列表字段忽略并尝试覆盖它,但未成功。
关于:
After modifying list in custom DefaultListModel with addElement and removeElement how can this shows the modified list :
并且调用这些方法会修改DefaultListModel默认持有的数据核,不会对自己的list字段有丝毫的改变。
我建议您要么摆脱列表字段,而是将数据传递给超级对象,如果需要,包括它的构造函数,或者扩展 AbstractListModel 然后确定使用您自己的数据核心。如果您确实使用派生的 AbstractListModel class,则必须注意在模型更改时正确调用通知方法,DefaultListModel 会为您处理这些事情。
老实说,根据您发布的内容,除非您有问题中未提及的要求,否则我不确定您是否需要扩展 DefaultListModel 或 AbstractListModel,而是简单地使用 DefaultListModel 作为-是。