繁体   English   中英

使用JList .setModel()方法,将类作为参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM