Java 强制更新JList

Java 强制更新JList,java,swing,jlist,Java,Swing,Jlist,当我编辑列表中某个对象的数量,并且toString发生更改时,如何使用新的toString更新列表 例如,当我在JTree中更改节点时,我使用nodeChanged(node)当我更改列表项时我该怎么办?list.updateUI()会这样做,尽管我被告知这会有一些开销。list.updateUI()会这样做,尽管我被告知这会有一些开销。如果从AbstractListModel扩展 这与您上一个问题的JTree的原则相同。AbstractListModel不知道对象的某些内部属性何时更改。因此,

当我编辑列表中某个对象的数量,并且toString发生更改时,如何使用新的toString更新列表

例如,当我在JTree中更改节点时,我使用nodeChanged(node)当我更改列表项时我该怎么办?

list.updateUI()会这样做,尽管我被告知这会有一些开销。

list.updateUI()会这样做,尽管我被告知这会有一些开销。

如果从
AbstractListModel
扩展

这与您上一个问题的
JTree
的原则相同。
AbstractListModel
不知道对象的某些内部属性何时更改。因此,在进行更改时,必须调用指示对象已更改的特定方法。列表模型将触发由
JList
接收到的正确事件,该事件将更新/重新绘制(无论您如何称呼它)

就个人而言,我更喜欢创建自包含的
ListModel
s,例如,如果您在更改
ListModel
时使用的对象可以侦听这些更改并触发适当的事件本身,而不必从外部调用此方法

编辑

刚刚注意到,这个特定的方法是受保护的,因此您需要按照我的建议创建模型,并且如果您从
AbstractListModel
进行扩展,则无法从外部调用该方法(这是一件好事)

这与您上一个问题的
JTree
的原则相同。
AbstractListModel
不知道对象的某些内部属性何时更改。因此,在进行更改时,必须调用指示对象已更改的特定方法。列表模型将触发由
JList
接收到的正确事件,该事件将更新/重新绘制(无论您如何称呼它)

就个人而言,我更喜欢创建自包含的
ListModel
s,例如,如果您在更改
ListModel
时使用的对象可以侦听这些更改并触发适当的事件本身,而不必从外部调用此方法

编辑


刚刚注意到特定的方法是受保护的,所以您需要按照我的建议创建模型,并且您不能在外部调用该方法(这是一件好事)

不使用updateUI,这些方法是“我将接受任何其他答案”。在这种情况下,也许最好留下一条注释。我知道updateUI会做我想做的事情,但我听说这是非常错误的。@mKorbel
repaint()
会更好吗?(它也可以工作,但似乎与LaF无关)。@Matthieu一定是编码有误,因为JList没有任何问题来重新绘制API中实现的方法的所有更改,例如,所有更新都在EDT上完成,包装到invokeLater()中(不是void,class,…创建Swing GUI的输出,而是JList API中插入的具体方法)不要使用updateUI,这些方法是“我会接受任何其他答案”。在这种情况下,也许最好留下一条评论。我知道updateUI会做我想做的事情,但我听说这是非常错误的。@mKorbel
repaint()
会更好吗?(它也可以工作,但似乎与LaF无关)。@Matthieu一定是编码有误,因为JList没有任何问题来重新绘制API中实现的方法的所有更改,例如,所有更新都在EDT上完成,包装到invokeLater()中(不是void,class,…创建Swing GUI的输出,而是在JList API中插入的具体方法)AbstractListModel#fireContentsChanged:-),我可以为您的电池共享我的充电器:-),只是我的好奇心,请您详细说明:-)大多数时候您都有很好的想法,在本例中,我最初有一个想法,您建议为JList共享JTree模型,然后我的问题是,我想提到他的问题,我在这个问题5分钟前回答了这个问题,这是一个完全相同的问题,但只针对
JTree
而不是
JList
Hmm。因此,如果你使用
DefaultListModel
,你就无法真正做到这一点。我发现仅仅为了暴露该方法(或编写一个等效的方法)而必须扩展它是很麻烦的…AbstractListModel#fireContentsChanged:-),我可以为你的电池共享我的充电器:-),只是我的好奇心,请你详细说明一下:-)大多数时候你都有很好的想法,在本例中,我最初有一个想法,您建议为JList共享JTree模型,然后我的问题是,我想提到他的问题,我在这个问题5分钟前回答了这个问题,这是一个完全相同的问题,但只针对
JTree
而不是
JList
Hmm。因此,如果你使用
DefaultListModel
,你就无法真正做到这一点。我发现仅仅为了公开该方法(或编写一个等效的方法)而扩展它是很麻烦的。唯一明显的是updateUI。updateUI是
JList
上的一个方法,而您应该在模型侧(而不是视图侧)进行搜索唯一明显的是updateUI。updateUI是
JList
上的一个方法,而您应该在模型侧(而不是视图侧)进行搜索