Java 7中的JCombobox已经更新为使用泛型 - 我一直认为它有点疏忽,但它还没有,所以我很高兴看到这种变化。
然而,当试图以这种方式使用JCombobox时,我意识到我期望使用这些泛型类型的方法still just return Object.
为什么这个呢?对我来说,这似乎是一个愚蠢的设计决定。我意识到底层的ListModel有一个通用的getElementAt()
方法,所以我会用它来代替 - 但它有点迂回的做法,看起来它可能已经在JComboBox本身上被改变了。 / p>
答案 0 :(得分:57)
我想你是指getSelectedItem()
?
原因是如果组合框是可编辑的,则所选项目不一定包含在后备模型中,并且不限于泛型类型。例如。如果你有一个带有模型[1,2,3]的可编辑JComboBox<Integer>
,你仍然可以在组件中键入“foo”,getSelectedItem()
将返回字符串“foo”而不是类型的对象整数。
如果组合框不可编辑,您始终可以按cb.getItemAt(cb.getSelectedIndex())
来实现类型安全。如果未选择任何内容,则会返回null
,这与getSelectedItem()
的行为相同。
答案 1 :(得分:1)
这是一个类型安全的版本:
public static <T> T getSelectedItem(JComboBox<T> comboBox)
{
int index = comboBox.getSelectedIndex();
return comboBox.getItemAt(index);
}