我开始制作一个小型应用程序,要求用户从组合框中选择省份,然后向组合框添加了一个动作侦听器。我想测试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);
            }
        });

最佳答案

您没有添加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设计中的一种幻觉。有太多因素会影响组件的单个大小,您无法控制。 Swing旨在与布局经理为核心一起工作,舍弃这些问题不会导致问题和问题的终结,您将花费越来越多的时间来尝试纠正问题

关于java - JComboBox返回 double 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28102709/

10-11 03:58