Java组合框模型并获取所选项目

时间:2012-06-06 20:08:52

标签: java swing events awt

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

3 个答案:

答案 0 :(得分:3)

有关如何使用JComboBox的信息,请参阅this tutorial,特别是有关处理事件的部分。您应该在组合框中添加ActionListener。当用户实际做出表示他们的选择被确认的手势时,它将被触发。

答案 1 :(得分:2)

您已查看添加到ItemListenerActionListenerJComboBox

答案 2 :(得分:0)

getSelectedItem()确实会多次触发,以及动作事件。对于一个可编辑的组合框,动作会针对comboboxchanged触发一次,一次针对comboboxedited触发。我已经设置了不特定于getSelectedItem中的结束项的验证,并将其余部分移动到了comboboxchanged的过滤动作事件中。我完全忽略了组合框架事件。