动态添加元素到 JList
温馨提示:这篇文章已超过370天没有更新,请注意相关的内容是否还可用!
学习Java的时候用过JList,不知道如何添加元素。Jlist 一种显示对象列表并允许用户选择一个或多个项目的组件。一个单独的模型 ListModel 维护列表的内容。这里注意,在容器中添加 Jlist 时可以选择使用 JScrollPane(提供轻量级组件的可滚动视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。这里只是举个例子:来说明JList对象不能直接添加到JPanel中,而必须先添加到JScrollPane中,然后再将JScrollPane对象添加到JPanel中。这里没有添加布局管理器的代码,读者可以按照这个思路自行添加。
学习Java的时候用过JList,不知道如何添加元素。 这是我的经验:
Jlist 一种显示对象列表并允许用户选择一个或多个项目的组件。 一个单独的模型 ListModel 维护列表的内容。
这里注意,在容器中添加 Jlist 时可以选择使用 JScrollPane(提供轻量级组件的可滚动视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。)
例如:
Panel jp = new JPanel();
JScrollPane jsp = new JScrollPane();
JList jl = new JList();
jsp.add(jl);
jp.add(jsp);
这里只是举个例子:来说明JList对象不能直接添加到JPanel中,而必须先添加到JScrollPane中,然后再将JScrollPane对象添加到JPanel中。 这里没有添加布局管理器的代码,读者可以按照这个思路自行添加。 (这只是我的经验,如果有更好的方法请补充)。
如何动态添加元素到JList:
首先通过一个例子来说明静态添加元素:
//在初始化的时候通过构造函数添加,也可以先指定容器大小
String[] data = {"one", "two", "three", "four"};
JList myList = new JList(data);
Vector superClasses = new Vector();
Class rootClass = javax.swing.JList.class;
for(Class cls = rootClass; cls != null; cls = cls.getSuperclass()) {
superClasses.addElement(cls);
}
JList myList = new JList(superClasses);
//获取列表元素
ListModel model = myList.getModel();
for(int i = 0; i < model.getSize(); i++) {
System.out.println(model.getElementAt(i));
}
这三种类型都是jdk文档中的示例。 它们是创建 JList 时静态添加的元素。 添加后不可修改、删除、添加。
如果要动态添加,以下是我的经验:
根据我的理解,其实JList并不关心数据的添加,而是数据的添加是由DefaultListModel类来实现的。 先说一下这个类的继承关系。
列表模式(接口)
//例如:
DefaultListModel dlm = new DefaultListModel();
dlm.addElement(element1);
dlm.addElement(element2);
.....
JList jl = new JList();
jl.setModel(dlm);
//这样就把元素都添加进去了。
//同理:要删除全部信息
dlm.clear();
jl.setModel(dlm);
//即可。
//移除此列表中指定位置处的元素
//则:
dlm.remove(int index);
jl.setModel(dlm);
总之,JList并不关心元素的添加,而是通过DefaultListMode来管理,最终设置Jlist.setMode(DefaultListMode)完成元素的动态添加。
- - 超过
//补充一些文档内容
JList的setModel()方法:
public void setModel(ListModel<E> model)
//设置表示列表的内容或“值”的模型,通知属性更改侦听器,然后清除列表的选择。
JList是通过ListModel来管理数据的,DefaultListModel继承于ListModel
可先通过--DefaultListModel来管理,
然后通过list.setModel()
private JList<String> list = new JList<String>();
private DefaultListModel<String> dlm = new DefaultListModel<String>();
//在List第一行添加"hello"
dlm.add("hello",0);
//在末尾添加"world"
dlm.addElement("world");
//清空操作
dlm.clear();
....
list.setModel(dlm);
//也可以这样理解:
DefaultListMedel:定义了一系列预操作动作,首先将这些动作封装在DefaultListModel对象中
然后JList通过setModel()接收这个“action”对象,并完成(添加、删除、检查)操作
还实现了JList的数据刷新