0

基本上,我有来自 NetBeans 的 GUI Builder 的默认创建者生成以下代码:

IPAddressList = new javax.swing.JList();

IPAddressList.setModel(new javax.swing.AbstractListModel() {
    String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
    public int getSize() { return strings.length; }
    public Object getElementAt(int i) { return strings[i]; }
});

AddressList.setViewportView(IPAddressList);

我想要将其更改为有一个 ArrayList 而不是一个向量,我可以在其中通过按钮使用该 ArrayList 的添加和删除功能。我是 GUI 世界的新手,我一直在尝试几种不同的方法(我不知道在哪里放置 DefaultListModel 以使其正常工作)。请尽可能具体地回答这个问题。

我真正需要的是一个 Jlist 代码,我可以将此代码更改为具有 ArrayList 的 ArrayList,如果我说 IPAddressList.arraylist.add() 它将向该 Jlist 内的 ArrayList 添加一些内容并相应地更新 Jlist。删除也是一样。提前致谢!

4

1 回答 1

1

你可以这样做:

方法1(可变):

List<String> myList = 
      new ArrayList<>(Arrays.asList("Item 1", 
                                    "Item 2", 
                                    "Item 3", 
                                    "Item 4", 
                                    "Item 5"));

DefaultListModel model = new DefaultListModel();
JList myJList = new JList(model);

更新:

model.clear();
for (String item : myList) {
   model.addElement(item);
}

方法2(不可变):

List<String> myList = ...    
JList myJList = new JList(myList.toArray(new String[myList.size()]));

诚然,第二种方法没有使用DefaultListModel,但这就是它被包含在内的原因:

对于拥有大约 200 个或更多项目的模型,使用 DefaultListModel 的addElement相对较慢。将数组传递ObjectJList(E[] listData)比使用 a 单独添加元素更快,DefaultListModel因为新元素AbstractListModel是基于List元素创建的。此错误报告中对此进行了讨论并提供了替代方案。

于 2013-04-17T15:23:35.293 回答