2011-07-25 123 views
1

我想要举例说明当我从ArrayList添加或移除元素时如何更新JList。JList和ArrayList更新

ArrayList是Model类的一部分。 Model类通过其构造函数传递给视图(这是一个包含多个swing组件的JPanel,我想更新JList)。模型类也被注入一个读取从服务器接收到的值的类中。当我从服务器收到数据时,我通过执行model.getArrayList()。add(data)将其中的一些添加到我的arrayList中。当我添加数据到arrayList时,我想更新我的视图中的JList。我想帮助我如何链接我的ArrayList与我的JList。

+1

是不是这个,例如? http://stackoverflow.com/questions/6420623/how-to-bind-arraylist-to-jlist – woliveirajr

回答

4

如果你创建自己的ListModel你应该继承AbstractListModel,并实现您addElement方法时,你需要调用一个 - 方法(用于通知用于更新的用户界面),如:

public void addElement(MyObject obj) { 
    myArrayList.add(obj); 
    fireIntervalAdded(this, myArrayList.size()-1, myArrayList.size()-1); 
} 

你自定义ListModel应该看起来像这样:

public class MyListModel extends AbstractListModel { 

    private final ArrayList<MyObject> myArrayList = new ArrayList<MyObject>(); 

    public void addElement(MyObject obj) { 
     myArrayList.add(obj); 
     fireIntervalAdded(this, myArrayList.size()-1, myArrayList.size()-1); 
    } 

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

    @Override 
    public int getSize() { return myArrayList.size(); } 
} 
+0

你好,所以在我需要在Model类中创建ListModel的情况下,我不需要ArrayList。我可以使用ListModel而不是? – wotan2009

+0

@wotan:你的'Model'类应该扩展'AbstractListModel',并且你需要一个'ArrayList'来获取你的元素。如果你想使用'ListModel',那么你需要手工编写通知。 – Jonas

+0

@wotan:用自定义ListModel的示例查看我的更新。 – Jonas

6

您需要使用ListModel来控制从JList添加和删除项目。该教程是非常有用的: http://download.oracle.com/javase/tutorial/uiswing/components/list.html

下面是本教程一些示例代码:

listModel = new DefaultListModel(); 
listModel.addElement("Jane Doe"); 

listModel.insertElementAt(employeeName.getText(), index);  

int index = list.getSelectedIndex(); 
listModel.remove(index); 

如果你有一个ArrayList,你可以围绕它建立自己的List Model

+0

和链接的例子http://www.java2s.com/Code/Java/Swing-JFC/List.htm + 1 – mKorbel

+0

我每次向阵列列表添加元素时如何通知列表模型? – wotan2009

+0

以ArrayList为后盾构建您自己的List Model。 – jzd