我创建了一个存储两个属性的类
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访问。
我该如何解决?
答案 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"
Select the "Code" tab from the "Properties" tab...
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()
方法。