繁体   English   中英

如何打开 Java 双端队列<t>进入 DefaultListModel?</t>

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

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