如何在java.swing.AbstractListModel
中使用fireContentsChanged()
方法?当ListModel
中某些元素的"内容"发生变化时,调用该方法。
- 这是否仅仅意味着索引对象发生了某种改变?
- 或者它也包括当索引的对象已被替换为不同的对象?
- 您可以将此用于添加/删除索引吗?例如,假设我从列表的任意位置随机移除10个元素。我给什么
index0
和index1
?如果我在随机位置插入10个元素呢?
AbstractListModel
是ListModel
的抽象实现,它提供了ListDataListener
方法的具体实现,但它内部不包含特定的数据结构。接收到相应的ListDataEvent
允许监听的JList
更新自己以响应ListModel
的变化。DefaultListModel
是AbstractListModel
的一个典型的具体子类,它在内部操作Vector
。源代码说明了典型的用法。特别是,fireContentsChanged()
是"当列表的内容以一种太复杂的方式改变而无法用以前的方法来描述时发送的",fireIntervalAdded()
或fireIntervalRemoved()
。因为Vector
是原始DefaultTableModel
的遗留,所以您需要使用更灵活的替代方案;index0
和index1
是指所选数据结构的元素。
如果我在随机位置插入10个元素会怎样?
那么index0
和index1
应该"括号内的变化。"
"括号内的变化"是什么意思?
在这种情况下,括号用作动词,意思是包围或包括;index0
应该包含变化最小的索引,index1
应该包含变化最大的索引。这个范围可能包括中间细胞,即使它们没有改变。令人高兴的是,像JTable
一样,JList
只呈现可见单元格,因此边际成本是有限的;这里更多。