当前位置: 首页 > 面试题库 >

为什么JComboBox上的getSelectedItem()不通用?

楚博雅
2023-03-14
问题内容

Java 7中的JCombobox已更新为使用泛型-我一直认为它还没有做到,这有点疏忽,所以我很高兴看到这一更改。

但是,当尝试以这种方式使用JCombobox时,我意识到我期望使用这些泛型类型的方法仍然会返回Object.

这到底是为什么呢?对我来说,这似乎是一个愚蠢的设计决定。我意识到底层的ListModel有一个通用getElementAt()方法,因此我将改用它-
但这似乎是可以在JComboBox本身上更改的某种回旋方式。


问题答案:

我想你指的是getSelectedItem()

原因是,如果组合框是可编辑的,则所选项目不一定包含在支持模型中,也不必局限于通用类型。例如,如果您具有JComboBox<Integer>模型[1、2、3]
的可编辑内容,则仍可以在组件中键入“ foo”,并且getSelectedItem()将返回字符串“ foo”,而不是Integer类型的对象。

如果组合框不可编辑,则可以始终推迟cb.getItemAt(cb.getSelectedIndex())以实现类型安全。如果未选择任何内容,则返回null,这与getSelectedItem()



 类似资料:
  • 问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen

  • 问题内容: 与这两个帖子@iMohammad有关, 在单击JButtonJava时使用JButton增加/减少textArea内的字体大小并在单击JButton Java时更改字体样式 …,我面临着一个非常有趣的问题,该问题来自于on 作为参数传递屏幕 请如何动态调整大小取决于,与我在sscce中尝试过的另一个JComponent正常工作一样 问题答案: 我调试了您的SSCCE,并且传递给的值为空

  • 在我的swing应用程序中有两个组合框--在下面的代码中,您将看到Spring的元素,因为我也在使用Spring。我不能删除spring,否则应用程序将停止工作,没有大量的重构工作来取代spring的位置,所以请不要问这个。在应用程序的默认启动时,当进入带有组合框的对话框时,它们应该不会显示任何选择,如果您单击该框打开以显示选项,则只有一个选项(“Add...”)。 问题是单击“Add...”后,

  • 问题内容: 我正在使用带有ItemListener的JComboBox。更改值后,itemStateChanged事件将被调用两次。第一次调用,ItemEvent显示所选的原始项目。第二次显示正在由用户选择的项目。这是一些测试器代码: 因此,当我将组合框从“一个”更改为“三个”时,控制台显示: 我有没有办法告诉我使用ItemEvent,它是第二个项目(即用户选择的项目)?如果有人可以解释为什么两次

  • 问题内容: Map方法中的此方法和许多其他方法不是通用的。几乎在任何将键值用作参数的地方,它都接受Object,即remove,get和containsKey。 他们为什么做出这个决定的任何想法。我的假设是这样做是为了支持遗留代码,但是对我而言,我认为这是一个弱势地位。 谁能提供给我一个具体的原因,为什么最好在这里接受Object而不是KeyType。 问题答案: 用于检索/删除/检查给定密钥是否

  • 我的代码中有一个< code>JCombobox。我已经添加了< code>FocusLost事件。但它无论如何也没有被解雇。我已经尝试了很多次,但没有找到解决办法。 但控制台中没有打印任何内容。请告诉我我做错了什么。