2017-02-20 71 views
0

我搜索上如何把額外的數據中的JComboBox在Java中,我發現最的結果是創建一個包含屬性鍵和值項目類。jCombo盒隱藏數據的Java

我已經做了,但我仍然有此錯誤whene我試圖在JComboBox中使用`新的項目(鍵,值)新增項目,

錯誤代碼是:

項目不能轉換爲字符串 jComboTemp1.addItem(new Item(「CA」,「Canada」));

這裏是類項目:

public class Item { 

    private int id; 
    private String description; 

    public Item(int id, String description) { 
     this.id = id; 
     this.description = description; 
    } 

    public int getId() { 
     return id; 
    } 

    public String getDescription() { 
     return description; 
    } 

    @Override 
    public String toString() { 
     return description; 
    } 
} 

這裏的問題表明,儘管我已經覆蓋的toString梅索德:

jComboTemp1.addItem(new Item<String>("CA", "Canada")); 
+1

發佈一個真正的程序,一個[mcve],顯示你的問題。您需要將您的JComboBox及其型號更改爲「JComboBox '和'DefaultComboBoxModel '類型。然後正確顯示重寫Item的'toString()',或者給組合框一個渲染器。 –

回答

1

你有幾個問題:

public class Item { 

類不使用泛型。

public Item(int id, String description) { 

構造函數期待「int」和「String」。

jComboTemp1.addItem(new Item<String>("CA", "Canada")); 

當您創建項目對象,你有兩個錯誤:

  1. 您正在嘗試使用泛型
  2. 您傳遞了錯誤的參數。

所以,你有兩種解決方案。您需要:

  1. 使用泛型正確,或
  2. 不要使用泛型。

如果你不使用泛型,那麼你需要正確的參數傳遞給Item對象:

jComboTemp1.addItem(new Item(1, "Canada")); 

如果你想使用泛型,那麼你需要修改Item類使用泛型。

查看Item類找到Combo Box With Hidden Data爲通用Item對象。這個對象是一個更完整的實現,因爲它也實現了equals(...)hashcode()方法。

從上面的鏈接使用Item類,如果你想在你的ItemInteger的數據,你可以使用:

JComboBox<Item<Integer>> jcomboTemp1 = new JComboBox<Item<Integer>>(); 
... 
jcomboTemp1.addItem(new Item<Integer>(1, "Canada")); 

使用通用對象是有點複雜,但你得到的附加安全編譯時間檢查以確保將適當的數據添加到類中。

泛型類更具可重用性。你可以很容易改變的代碼是:

JComboBox<Item<String>> jcomboTemp1 = new JComboBox<Item<String>>(); 
... 
jcomboTemp1.addItem(new Item<String>("CA", "Canada")); 

現在的類支持字符串格式的隱藏的價值,並需要對Item類沒有變化。

0

改爲:

jComboTemp1.addItem(new Item<String>("CA", "Canada")); 

用途:

jComboTemp1.addItem("CA"); 
jComboTemp1.addItem("Canada"); 

或者

jComboTemp1.addItem(new Item(1, "CA")); 
jComboTemp1.addItem(new Item(2, "Canada")); 

你有一個構造Item(int, String)而不是Item(String)

0

你不提供足夠的代碼在這裏:

什麼項目類你使用此:

jComboTemp1.addItem(new Item<String>("CA", "Canada")); 

您實例化一個通用類,但你的項目類是沒有通用類

下面的代碼對我的作品

class Item { 
    private final int id; 
    private final String name; 
    public Item(int id, String name) { 
     super(); 
     this.id = id; 
     this.name = name; 
    } 
    public int getId() { 
     return id; 
    } 
    public String getName() { 
     return name; 
    } 
    @Override 
    public String toString() { 
     return getName(); 
    } 
} 


JComboBox<Item> combobox = new JComboBox<Item>();  
combobox.addItem(new Item(4711, "name1")); 
combobox.addItem(new Item(4712, "name2")); 
combobox.addItem(new Item(4713, "name3")); 
+1

我只創建了一個小例子,但我會更正我的答案 –

+0

*「我會糾正我的答案」*我認爲你的答案從來沒有'錯誤'。這裏的問題是這個問題需要澄清,因爲問題的某些部分的OP意味着2條信息是國家名稱的字符串縮寫和國名,而問題的其他部分意味着2條是一個基於整數和字符串的國家名稱。也許他們需要擴展'Item'來包含*整數**和** 2個字符串*,但最終他們需要決定(&告訴我們)「Item」需要包含的是什麼。 –