簡體   English   中英

Java Swing DefaultListModel包含存儲更多信息

[英]Java Swing DefaultListModel containing storing more information

我創建了一個用於存儲兩個屬性的類

public class MailEntry {
    private String mail;
    private MailFormat format; // this is an enum

    public MailEntry(String mail, MailFormat format) {
        this.mail = mail;
        this.format = format;
    }

    public String getMail() {
        return mail;
    }

    public MailFormat getFormat() {
        return format;
    }
}

Netbeans GUI為我創建的JList由以下方法聲明:

    private javax.swing.JList<String> jList1;

並初始化了DefaultListModel

private DefaultListModel<MailEntry> listModel = new DefaultListModel<>();

並設置為模型

jList1.setModel(listModel);

但是我得到的是

 error: incompatible types: DefaultListModel<MailEntry> cannot be converted to ListModel<String>
    jList1.setModel(listModel);

似乎jList期望使用Strings模型。 但是我想存儲更多特定於項目的信息,這些信息可以通過GUI訪問。

我該如何解決?

問題是您將jList1 jList1為...

private javax.swing.JList<String> jList1;

但您將模型聲明為...

DefaultListModel<MailEntry> listModel = new DefaultListModel<>();

MailEntryString是不兼容的類,並且JList需要基於ListModel<String>的模型。

您需要更改JList聲明以支持您的模型,例如

private javax.swing.JList<MailEntry> jList1;

由於您使用的是Netbean的表單編輯器(不幫助我入門),因此需要從“導航器”中選擇JList

航海家

從“屬性”標簽中選擇“代碼”標簽。

性質

並更改Type Parameters以滿足您的要求

private DefaultListModel<MailEntry> listModel = new DefaultListModel<>();

應該:

private DefaultListModel<MailEntry> listModel = new DefaultListModel<MailEntry>();

然后在創建JList時應使用:

JList<MailEntry> list = new Jlist<MailEntry>();

所以一切都應該是一致的。

請注意,您還需要創建一個自定義渲染器以顯示數據。 默認渲染器僅使用類的toString()值。 您可以閱讀Swing教程中有關如何使用列表的部分, 獲取更多信息和示例。

另一個選擇是僅在您的類中實現toString()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM