0

下面的代码显示了我在使用组合操作时遇到的问题。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();
    }
  }
}
4

3 回答 3

3

请参阅本教程以了解如何使用 JComboBox,特别是有关处理事件的部分。您应该将一个添加ActionListener到您的组合框中。当用户实际做出表明他们的选择已确认的手势时,它将被触发。

于 2012-06-06T20:17:10.377 回答
2

您已经查看了添加到JComboBox的ItemListenerActionListener

于 2012-06-06T20:15:50.280 回答
0

getSelectedItem() 确实触发了多次,以及动作事件。对于可编辑的组合框,该操作会为 comboboxchanged 触发一次,而为 comboboxedited 触发一次。我已经在 getSelectedItem 中设置了不特定于最终项目的验证,并将其余部分移到组合框更改的过滤操作事件中。我完全忽略了 comboboxedited 事件。

于 2012-06-07T17:55:13.457 回答