![](/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.