在java中为组合框分配键

时间:2012-10-13 07:08:03

标签: java swing awt jcombobox

我想在Swing中添加JComboBox这很简单,但我想为组合中的每个项目分配值。我有以下代码

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

现在我想要的是当点击组合框时它应该相应地返回1,2和3  而不是a,b,c。 有没有办法为组合框中的每个项目分配键值?

3 个答案:

答案 0 :(得分: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的{​​{1}})

答案 1 :(得分:1)

您可以创建自己的模型并将其添加到组合框中,而不是直接添加字符串。

检查Java ComboBoxModel

您可以在this thread

中找到更多信息

答案 2 :(得分: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等)