2012-10-13 61 views
0

我想在Swing中添加一個JComboBox,這很簡單,但我想爲組合中的每個項目分配值。我有以下代碼在java中爲組合框分配鍵

JComboBox jc1= new JComboBox(); 
    jc1.addItem("a"); 
    jc1.addItem("b"); 
    jc1.addItem("c"); 

現在我想的是,當點擊組合框它應該返回1,2和3相應 而不是A,B,C。 有沒有辦法爲組合框中的每個項目分配鍵值?

+1

a,b&c可以表示爲1 ,'JComboBox.getSelectedIndex()+ 1'的2&3。 –

回答

4

更多信息,您可以添加項目作爲對象,而不是添加字符串是這樣的:

JComboBox<ItemClass> jc = new JComboBox<ItemClass>(); 
    jc.addItem(item1); 
    jc.addItem(item2); 
    jc.addItem(item3); 

所以要返回鍵,事件的功能是:jc.getSelectedItem().getKey 通過這種方式,您必須重寫類ItemClass的toString()函數以返回要在組合框中顯示的字符串。

順便說一句,退貨數量,您可以嘗試:jc.getSelectedIndex(),它會在一個簡單的類返回索引你的字符串(0 1 2"a" "b" "c"

+0

JComboBox不是泛型類。所以你不能直接使用上面的代碼。相反,您需要定義一個自定義的ComboBoxModel並將其設置爲JComboBox對象。 – mhshams

+0

它仍然是JDK 1.7 .... http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html –

+0

但如何以及在哪裏我必須分配密鑰 –

1

您可以創建自己的模型並將其添加到組合框,而不是直接添加字符串。

檢查Java ComboBoxModel

你可以找到在this thread

1

包裝你的數據:

class MyData { 
    int value; 
    String text; 
    ... 
} 

現在您可以通過擴展BasicComboBoxRenderer來編寫自己的渲染器。將「值」轉換爲「MyData」並呈現文本。

public class Bla extends BasicComboBoxRenderer{ 

@Override 
public Component getListCellRendererComponent(JList list, Object value, 
     int index, boolean isSelected, boolean cellHasFocus) { 
    if(value instanceof MyData) { 
     setText(((MyData) value).getText()); 
    } 
    return super.getListCellRendererComponent(list, value, index, isSelected, 
      cellHasFocus); 
} 
} 

如果你使用Java7是使用泛型像@Taiki表現出最佳實踐。現在,您可以通過jc.getSelectedItem()獲取所選對象。它始終是輸入MyData,您可以訪問文本(「a」,「b」等)和值(1,2,3等)