包含存储更多信息的 Java Swing DefaultListModel

mar*_*trz 0 java swing

我创建了一个类来存储两个属性

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Netbeans GUI 为我创建的 JList 声明为

    private javax.swing.JList<String> jList1;
Run Code Online (Sandbox Code Playgroud)

并初始化了一个 DefaultListModel

private DefaultListModel<MailEntry> listModel = new DefaultListModel<>();
Run Code Online (Sandbox Code Playgroud)

并将其设置为模型

jList1.setModel(listModel);
Run Code Online (Sandbox Code Playgroud)

但我得到的是

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

似乎 jList 需要一个字符串模型。但我想存储更多特定于项目的信息,这些信息可以通过 GUI 访问。

我该如何解决?

Mad*_*mer 5

问题是你已经声明jList1为...

private javax.swing.JList<String> jList1;
Run Code Online (Sandbox Code Playgroud)

但是您将模型声明为...

DefaultListModel<MailEntry> listModel = new DefaultListModel<>();
Run Code Online (Sandbox Code Playgroud)

MailEntry并且String不是兼容的类,并且JList期望ListModel<String>基于模型。

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

private javax.swing.JList<MailEntry> jList1;
Run Code Online (Sandbox Code Playgroud)

由于您使用的是 Netbean 的表单编辑器(不要让我开始),您需要JList从“导航器”中选择

航海家

从“属性”选项卡中选择“代码”选项卡...

特性

并更改Type Parameters以满足您的要求