JList动态添加元素
转自:https://www.cnblogs.com/tianguook/archive/2012/01/31/2333992.html
学Java时用到了JList不知怎么添加元素,这里说说我的经验:
Jlist显示对象列表并且允许用户选择一个或多个项的组件。单独的模型 ListModel
维护列表的内容。
这里要注意在把Jlist添加到容器时可以选择用JScrollPane(提供轻量级组件的 scrollable 视图。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类实现数据的添加,先说说这个类的继承关系。
ListMode(接口)<----AbstractListMode类<------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() 接收这个"动作"对象,完成(增,删,查)操作
也就实现了JList的数据刷新