JList动态添加元素

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的数据刷新

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值