下面的代码显示了我在使用组合操作时遇到的问题。 getSelectedItem()被多次触发,而不是仅在选择时触发。只需加载框架就可以调用方法3次。每次单击组合框都是一个调用,即使它仅用于下拉列表而不是实际选择。单击可编辑文本区域内部也会触发getSelectedItem()方法。有没有办法过滤这个事件?或者在盒子模型级别验证数据的另一种方法?
public class SSCCE {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame aframe = new JFrame();
Combo _combo = new Combo();
_combo.addElement("This");
_combo.addElement("That");
JComboBox _box = new JComboBox(new Combo());
_box.setEditable(true);
aframe.add(_box);
aframe.setVisible(true);
}
static class Combo extends DefaultComboBoxModel{
public Combo(){
}
int i = 0;
@Override
public Object getSelectedItem() {
System.out.println("Get selected Item" + i);
i++;
return super.getSelectedItem();
}
}
}
答案 0 :(得分:3)
有关如何使用JComboBox的信息,请参阅this tutorial,特别是有关处理事件的部分。您应该在组合框中添加ActionListener
。当用户实际做出表示他们的选择被确认的手势时,它将被触发。
答案 1 :(得分:2)
您已查看添加到ItemListener的ActionListener或JComboBox
答案 2 :(得分:0)
getSelectedItem()确实会多次触发,以及动作事件。对于一个可编辑的组合框,动作会针对comboboxchanged触发一次,一次针对comboboxedited触发。我已经设置了不特定于getSelectedItem中的结束项的验证,并将其余部分移动到了comboboxchanged的过滤动作事件中。我完全忽略了组合框架事件。