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