JComboBox 返回双精度值

JComboBox returning double value

我开始制作一个小应用程序,用户需要从组合框中 select 他们的省份,我向组合框添加了一个动作侦听器。我想测试 ActionListener 所以我只是让它打印 selected 到控制台的内容。出于某种原因,似乎我得到了两次返回组合框的值。例如,我在组合框上 select "Alberta","Alberta Alberta" 打印到控制台。有人知道为什么会这样吗?

JComboBox comboProv = new JComboBox(provinces);
        comboProv.setBounds(40, 79, 137, 24);
        contentPane.add(comboProv);
        comboProv.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                String selectedProv = (String)comboProv.getSelectedItem();
                System.out.print(selectedProv);
            }
        });

将其放入监听器中。它打印了两次,因为它被调用用于 selecteddeselected.. 所以将其添加到过滤器

if (e.getStateChange() == ItemEvent.SELECTED) {
               String selectedProv = (String)comboProv.getSelectedItem();
               System.out.print(selectedProv);.
    } else if(e.getStateChange() == ItemEvent.DESELECTED){
                //Do any operations you need to do when an item is de-selected.
    }       

你没有添加一个ActionListener,你添加了一个ItemListener,一个ItemListener会在值变化时被通知两次,一次是针对ItemEvent.DESELECTED事件一次是 ItemEvent.SELECTED.

如果您对更改选择不感兴趣,只需使用 ActionListener

comboProv.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String selectedProv = (String)comboProv.getSelectedItem();
        System.out.print(selectedProv);
    }
});

只会通知一次

避免使用 null 布局,像素完美布局是现代 ui 设计中的一种错觉。影响组件个体大小的因素太多,none 是您可以控制的。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正