0

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

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

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

4

3 回答 3

4

您可以将项目添加为对象,而不是像这样添加字符串:

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

所以要返回键,事件的功能是:jc.getSelectedItem().getKey 这样做你必须重写toString()类ItemClass的函数来返回你想在组合框中显示的字符串。

顺便说一句,对于返回号,您可以尝试 : jc.getSelectedIndex(),它将返回您的字符串索引(0 1 2for "a" "b" "c"

于 2012-10-13T07:19:28.177 回答
1

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

检查 Java ComboBoxModel

你可以在这个线程中找到更多信息

于 2012-10-13T07:18:21.753 回答
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 等)

于 2012-10-13T09:34:12.583 回答