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

为什么更改时JComboBox上的itemStateChanged被调用两次?

聂迪
2023-03-14
问题内容

我正在使用带有ItemListener的JComboBox。更改值后,itemStateChanged事件将被调用两次。第一次调用,ItemEvent显示所选的原始项目。第二次显示正在由用户选择的项目。这是一些测试器代码:

public Tester(){

    JComboBox box = new JComboBox();
    box.addItem("One");
    box.addItem("Two");
    box.addItem("Three");
    box.addItem("Four");

    box.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent e){
            System.out.println(e.getItem());
        }
    });

    JFrame frame = new JFrame();
    frame.getContentPane().add(box);
    frame.pack();
    frame.setVisible(true);
}

因此,当我将组合框从“一个”更改为“三个”时,控制台显示:

One
Three

我有没有办法告诉我使用ItemEvent,它是第二个项目(即用户选择的项目)?如果有人可以解释为什么两次被调用,那也很好!

谢谢


问题答案:

看看这个来源:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Tester {

    public Tester(){

        JComboBox box = new JComboBox();
        box.addItem("One");
        box.addItem("Two");
        box.addItem("Three");
        box.addItem("Four");

        box.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent e){
                System.out.println(e.getItem() + " " + e.getStateChange() );
            }
        });

        JFrame frame = new JFrame();
        frame.getContentPane().add(box);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String [] args) {
        Tester tester = new Tester();
    }
}

使用getStateChange确定是否已选择或取消选择一项



 类似资料:
  • 问题内容: 为什么在组合框中选择项目时会两次调用此事件? 问题答案: 对于一次更改,JComoboBox ItemListener确实会被调用两次。一次用于SELECTED事件,一次用于DESELECTED事件。 有关如何编写ItemListener的信息,请参见本教程页面。 基本上你要做的就是

  • 我试图在点击组合框时获取当前行数据。我的问题是,如果我试图在单击组合框时获取详细信息,则检索到的数据是错误的。 这是在集合中填充无效数据。请按照下面提到的确切步骤进行复制。 请运行代码以复制该问题,因为它只在初始选择期间工作,而不是之后。 注意:请仅在第二列中单击“直接” 下面是示例代码:

  • 下面的程序迭代一个字符串。迭代器将其在空格之间剪切,并返回每个单词。我使用for each循环来使用iterable字符串,在该循环中,我使用与外部循环中相同的迭代器对同一字符串再次迭代。输出是:hello 0 hello 2等。。。 但它应该是:你好0你好2。。。因为外部循环已经增加了迭代器的计数器。所以我想我在这张图片中遗漏了一些关于迭代器工作的东西。。。感谢您的帮助! 代码:

  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩

  • 问题内容: Java 7中的JCombobox已更新为使用泛型-我一直认为它还没有做到,这有点疏忽,所以我很高兴看到这一更改。 但是,当尝试以这种方式使用JCombobox时,我意识到我期望使用这些泛型类型的方法仍然会返回 这到底是为什么呢?对我来说,这似乎是一个愚蠢的设计决定。我意识到底层的ListModel有一个通用方法,因此我将改用它- 但这似乎是可以在JComboBox本身上更改的某种回旋

  • 我是个新手。我读了这个问题,但没有解决我的问题。我认为我对组件的理解是错误的。我的组件及其父组件如下所示:父组件: } 孩子: } 和索引。js: 首次安装后,控制台写入"id"两次。我不明白为什么?