[英]Java - Updating JList after changing an object
我有一个使用DefaultListModel的JList。
然后我将值添加到模型中,然后出现在JList中。 我创建了一个MouseListener(双击时)允许用户编辑他们选择的那个人的当前用户号。
我已经检查过该记录的实际对象正在被更改,它是。 我遇到的唯一问题是让实际的Jlist更新以显示该对象的新值。
我当前代码的片段是:
创建JList和DefaultTableModel:
m = new DefaultListModel();
m.addListDataListener(this);
jl = new JList(m);
jl.addMouseListener(this);
更新对象:
String sEditedNumber = JOptionPane.showInputDialog(this, "Edit number for " + name, number);
if (sEditedNumber != null) {
directory.update (name, sEditedNumber);
}
并且(当jl是JList而m是DefaultTableModel时):
public void contentsChanged(ListDataEvent arg0) {
jl.setModel(m);
}
而不是使用setModel()
,使用其中一个DefaultListModel
方法(如setElementAt()
setModel()
更新现有模型,这将为您提供fireContentsChanged()
。
您需要在ListModel上调用fireContentsChanged()
。
您需要调用DefaultListModel.fireContentsChanged()
。 但由于这种方法受到保护(我真的很想知道为什么),你不能直接这样做。 相反,做一个小的子类:
class MinoListModel<T> extends DefaultListModel<T>
{
public void update(int index)
{
fireContentsChanged(this, index, index);
}
}
将它用作列表模型:
m = new MinoListModel<>();
jl = new JList(m);
更新用户号后,更新相应的条目: m.update(theIndex);
或者,如果您不想要子类,则可以在用户编号更改后替换JList元素: m.setElementAt(theSameElement, theIndex);
。 虽然这有点麻烦,并且有一个子类似乎更清洁的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.