繁体   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