我想JComboBox
在 Swing 中添加一个简单但我想为组合中的每个项目分配值。我有以下代码
JComboBox jc1= new JComboBox();
jc1.addItem("a");
jc1.addItem("b");
jc1.addItem("c");
现在我想要的是,当单击组合框时,它应该相应地返回 1、2 和 3,而不是 a、b、c。有没有办法为组合框中的每个项目分配键值?
您可以将项目添加为对象,而不是像这样添加字符串:
JComboBox<ItemClass> jc = new JComboBox<ItemClass>();
jc.addItem(item1);
jc.addItem(item2);
jc.addItem(item3);
所以要返回键,事件的功能是:jc.getSelectedItem().getKey
这样做你必须重写toString()
类ItemClass的函数来返回你想在组合框中显示的字符串。
顺便说一句,对于返回号,您可以尝试 : jc.getSelectedIndex()
,它将返回您的字符串索引(0 1 2
for "a" "b" "c"
)
将数据包装在一个简单的类中:
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 等)