[英]Using the JList .setModel() method with a class as an argument
我的最终目标是拥有一个在运行时刷新其内容的JList,并且我已经找到了一个解决方案,可以在这篇帖子中使用SO ,但是我很好奇为什么我原来的想法没有。
截至目前,我有类似这样的设置,它的工作原理:
DefaultListModel default = new DefaultListModel();
for(int i = 0; i < array.size() ; ++i){
test.addElement(array.get(i));
}
list.setModel(default);
以下是我最初的计划。 我希望有一个实现ListModel的类作为参数传递,希望它能刷新JList。
SomeClass test = new SomeClass(); //Implements ListModel
list.setModel(test);
要么
SomeClass test = new SomeClass(); //Implements ListModel
list = new JList(test);
这些工作都没有,这让我很困惑。 这些最后两种方法是如何工作的,代码是如此清晰。
谢谢。
如果正确实现ListModel,第一种方法应该有效。 关键是当您更改需要调用的数据时:
fireContentsChanged(...);
来自AbstractListModel(我假设你扩展)。 调用此方法将告诉JList重绘自身。
第二种方法不起作用,因为您只是创建一个位于内存中的新JList组件。 创建组件不会将其添加到GUI。 因此,如果您使用此方法,则需要从GUI中删除原始JList,然后将新JList添加到GUI。 这不是很方便,并且是不应该使用这种方法的一个很好的理由。 设置模型始终是首选方法。
第一种情况似乎是我心中的解决方案。 你能提供一个可测试的例子吗?
第二种情况不起作用,因为你只是重用一个变量而实际上并没有改变Gui上的JList。 我假设你已经在代码中添加了这个列表。
很可能你的ListModel实现是错误的。
为什么不使用:
DefaultListModel<String> lstList = new DefaultListModel<String>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.