Java Swing DefaultListModel包含存储更多信息

时间:2016-04-21 19:29:19

标签: 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;
    }
}

由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访问。

我该如何解决?

2 个答案:

答案 0 :(得分:4)

The problem is you've decleared jList1 as...

private javax.swing.JList<String> jList1;

but you're declaring the model as...

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

MailEntry and String are not compatible classes and the JList is expecting a ListModel<String> based model.

You need to change the JList declaration to support your model, something like

private javax.swing.JList<MailEntry> jList1;

Since you're using Netbean's form editor (don't get me started), you will need to select the JList from the "Navigator"

Navigator

Select the "Code" tab from the "Properties" tab...

Properties

and change the Type Parameters to meet your requirements

答案 1 :(得分:2)

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

应该是:

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

然后当您创建JList时,您应该使用:

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

所以一切都应该是一致的。

请注意,您还需要创建自定义渲染器以显示数据。默认渲染器仅使用类的toString()值。您可以阅读How to Use Lists上Swing教程中的部分以获取更多信息和示例。

另一种选择是在您的班级中实施toString()方法。