基本上,我有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);
我想改变的是有一个数组列表而不是一个向量,我可以通过按钮使用数组列表的添加和删除函数。我是GUI世界的新手,我一直在尝试几种不同的方法(我不知道在哪里放置DefaultListModel以使其正确工作)。请尽可能具体地回答这个问题。
我真正需要的是一个Jlist代码,我可以把这个代码变成一个数组列表,如果我说ipaddresslist。ArrayList。add()它会添加一些东西到这个Jlist中的ArrayList并相应地更新Jlist。移除也是一样。提前感谢!
你可以这样做:
方法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
,但这里包含了它的原因:
使用DefaultListModel的adelement对于拥有200个或更多项目的模型来说相对较慢。将Object
数组传递给JList(E[] listData)比使用DefaultListModel
单独添加元素要快,因为新的AbstractListModel
是基于List
元素创建的。在这个bug报告中对此进行了讨论,并给出了替代方案。