Java-更改对象后更新JList



我有一个使用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);
}

And(当jl是JList,m是DefaultTableModel时):

public void contentsChanged(ListDataEvent arg0) {
        jl.setModel(m);
    }

使用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);。尽管这有点麻烦,而且有一个子类似乎是更干净的方法。

相关内容

  • 没有找到相关文章

最新更新