JComboBox返回double值

时间:2015-01-23 03:48:37

标签: java swing jcombobox

我开始制作一个小应用程序,用户需要从组合框中选择他们的省,我在组合框中添加了一个动作监听器。我想测试ActionListener所以我只是将它打印到控制台上。出于某种原因,似乎我得到了两次返回的组合框的值。例如,我在组合框中选择“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);
            }
        });

2 个答案:

答案 0 :(得分:2)

您没有添加ActionListener,添加ItemListenerItemListener会在值更改时通知两次,一次针对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设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正

答案 1 :(得分:1)

把它放在监听器中..它打印了两次,因为它被调用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.
    }