![](/img/trans.png)
[英]Java Swing - DefaultListModel - Printing all object information, when i only want to print one field
[英]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<>();
MailEntry
和String
是不兼容的类,并且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.