【问题标题】:Java JList modelJava JList 模型
【发布时间】:2011-02-22 23:56:13
【问题描述】:

如何从JList 创建一个列表模型,以便能够在其中插入一个项目。 我想用这个方法:addElement(java.lang.Object item)

我找到了解释here,但问题是ListModel是一个接口 即使我写了一个实现并覆盖了它的方法,我也不能使用addElement()方法

【问题讨论】:

  • 看看这个Sun Tutorial。包含有关如何将列表添加到 JList 的示例

标签: java swing jlist


【解决方案1】:

Java 已经提供了 ListModel 的实现,例如 DefaultListModel,您可以实例化和使用它们

例如:

final DefaultListModel model = new DefaultListModel();
model.addElement("one");
model.addElement("two");
model.addElement("three");

final JList list = new JList(model);

【讨论】:

  • 谢谢,我把最后一行改成了 list.setModel(model);它对我有用。
【解决方案2】:

如果有人需要使用自定义ListModel,这只是一种替代方法。在实现列表模型接口的类中,有必要创建一个结构来实际保存元素,如LinkedList,如下所示:

public class MyListModel implements ListModel{
    
    private LinkedList data;
    private LinkedList<ListDataListener> listeners;

    public MyListModel() {
        data = new LinkedList();
        listeners = new LinkedList();
    }
    
    public void addElement(Object element){
        data.add(element);
    }
    
    @Override
    public int getSize() {
        return data.size();
    }

    @Override
    public Object getElementAt(int index) {
        return data.get(index);
    }

    @Override
    public void addListDataListener(ListDataListener l) {
        listeners.add(l);
    }

    @Override
    public void removeListDataListener(ListDataListener l) {
        listeners.remove(l);
    }
    
}

您还可以创建访问方法来执行与LinkedList 相关的任何操作,例如removeElement(Object element),或者只是将数据LinkedList 公开,或者在必要时使用不同的数据结构。当然,对于简单的实现,使用 Java 提供的模型总是更容易。

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2022-12-31
    • 2011-01-09
    • 2012-10-30
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多