Java 防止当前选择的选择通知JComboBox中的侦听器

Java 防止当前选择的选择通知JComboBox中的侦听器,java,swing,events,jcombobox,Java,Swing,Events,Jcombobox,我想防止在用户选择已在JComboBox中选择的值时触发事件 例如,假设我有一个JComboBox,其模型具有以下值: 猫 狗 鱼 鸟 蛇 当前选择的值为“Cat”。如果用户再次选择“Cat”,而“Cat”已被选择,我希望防止侦听器收到通知 我试图通过在模型中的setSelectedItem(Object)中添加一个检查来实现这一点。然而,这并没有起作用 我的下一个假设是,如果我想要这个功能,我将需要子类化JComboBox,并覆盖它的setSelectedItem(Object)和cont

我想防止在用户选择已在
JComboBox
中选择的值时触发事件

例如,假设我有一个
JComboBox
,其模型具有以下值:

当前选择的值为“Cat”。如果用户再次选择“Cat”,而“Cat”已被选择,我希望防止侦听器收到通知

我试图通过在模型中的
setSelectedItem(Object)
中添加一个检查来实现这一点。然而,这并没有起作用

我的下一个假设是,如果我想要这个功能,我将需要子类化
JComboBox
,并覆盖它的
setSelectedItem(Object)
contentsChanged(ListDataEvent)
函数

然而,考虑到
contentsChanged(ListDataEvent)
的文档,我不太愿意覆盖它。因此,我向各位提出的问题是:

是否有更好的方法来获得所需的功能,而不需要对
JComboBox
进行子分类,并覆盖它的
setSelectedItem(对象)
contentsChanged(ListDataEvent)
函数?

我希望防止在用户 选择已在JComboBox中选择的值

  • 使用

  • 将代码包装到
    if(e.getStateChange()==ItemEvent.SELECTED){
    中,如图所示,如Oracle教程中所述


“我希望防止触发操作事件…”为什么?或者更确切地说:在这种情况下,为什么不忽略它呢?似乎你把马车放在了马之前。很简单,创建一个包含选定值的变量,在下一次选择后,将其与选定值进行比较,如果它们相等,则不做任何操作,将选定值分配给它并执行操作。这些JComboBox用于设置vaLUE在其他对象中,这些对象本身将触发其他事件。另一个问题是,我直到最近才意识到会发生这种情况,因此我的代码没有对此进行测试。此外,我的模型具有“禁用”值。如果我能找到一种方法,我还可以阻止选择这些“禁用”值值而不进行任何附加测试。@Azad这仍然会导致事件被激发,我甚至想阻止它被激发。@LegoAffles:这是不可能的,因为基于对象和事件的swing组件,告诉我,不使用事件,您如何知道所选值?您不能。事件就是为此而创建的。根据原文,问题文本,这正是答案。不幸的是,我的意图没有得到很好的传达,所以这并不能完全解决我的问题。+1对于你的回答,我仍然回答实际需要,如果不是问题的话。。1.见我对你问题的评论,2.不要这样做,JComboBox是复合的JComponent,像珠子一样散开,3.re_阅读由@Andrew Thompson撰写的评论-似乎你是本末倒置。4.不要模拟项目。实际上,我只是做了一些进一步的阅读。看起来这正好解决了我的问题。我的印象是,即使他们重新选择了当前值,它的状态也会是
ItemEvent.SELECTED
。正如such,把这个作为答案,谢谢。