[英]How do I make setters and getters for JList and DefaultListModel? (Java)
[英]How do I turn a Java Deque<T> into a DefaultListModel?
我写了一个 class(我们称之为 Model.java),其中包含一个Deque<T>
,以及用于使项目入队和出队的方法。 现在我试图将它与 GUI JList 联系起来。 我很困惑如何以某种方式使用我的“模型”数据——双端队列——作为 JList 想要的 DefaultListModel。 我仍在努力真正获得 OO 概念,因为它们适用于 GUI 编程。 DefaultListModel 文档指出:
This class loosely implements the java.util.Vector API, in that it implements the 1.1.x version of java.util.Vector, has no collection class support, and notifies the ListDataListeners when changes occur. 目前它委托给一个 Vector....
有没有办法让 DefaultListModel 使用我的Deque<T>
而不是 Vector,从而允许我的 Model.java 代码基本保持不变,同时免费提供所有监听/通知行为? 或者我是否必须重写 Model.java 才能使用 DefaultListModel 而不是Deque<T>
?
请注意, JList
构造函数采用ListModel
(一个接口),而不是DefaultListModel
(一个实现)。 这是一个 OO 原则(合同),指定JList
可以使用恰好实现ListModel
接口的任何 object。 来自Object 面向编程概念的 Java 教程:
接口是 class 与外界之间的契约。 当 class 实现一个接口时,它承诺提供该接口发布的行为。
由于ListModel
只有四种方法,因此您的 class 应该很容易实现它们并将操作委托给您的内部Deque
。 您的 class 应声明为
public class Model implements ListModel
{
....
并将包含四个实现ListModel
方法的附加方法。 这些实现可以在幕后做任何您需要的事情,但必须遵守ListModel
的定义以及在 JavaDoc 中作为ListModel
协定的一部分指定的任何行为。
完成此操作后,您可以构造一个JList
,将 class Model
的实例传递给构造函数。
对于JList
,您不必使用DefaultListModel
,只需使用ListModel
接口的一些实现。 后者使用Deque
非常容易实现。
我不知道该怎么做
addListDataListener()
AbstractListModel
可能是一个很好的起点,因为它已经实现了规定的EventListenerList
方法来处理侦听器和事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.