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に追加されたItemListenerまたはActionListenerを見ました。

于 2012-06-06T20:15:50.280 に答える
0

getSelectedItem()は、実際に複数回発生し、アクションイベントも発生します。編集可能なコンボボックスの場合、アクションは、comboboxchangedに対して1回、comboboxeditedに対して1回実行されます。getSelectedItemの最終アイテムに固有ではない検証を設定し、残りをcomboboxchangedのフィルター処理されたアクションイベントに移動しました。comboboxeditedイベントを完全に無視しました。

于 2012-06-07T17:55:13.457 に答える