簡體   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