3

ControlsFXCheckComboBoxを使用しており、メニューの開閉イベントをリッスンしたいと考えています。それを行う方法はありますか?

ユーザーがメニューを閉じたりフィールドを離れたりしたときに行った変更をコミットするには、これが必要です。TextFields では、ユーザーが Enter キーを押したときにこれを行いますが、このコントロールを使用するのは適切ではないようです。focusedPropertyあるいは、何らかの方法で協力してみることができます。

4

2 に答える 2

1

古い質問ですが、誰かを助けるかもしれません。元のソースは次のとおりです: https://bitbucket.org/controlsfx/controlsfx/issues/462/checkcombobox-ignores-prefwidth-maybe-any by Olivier Vanrumbeke

CheckComboBox からコンボボックスにアクセスするには、スキンが null でない場合にこれを試してください。

 CheckComboBoxSkin skin = (CheckComboBoxSkin)checkComboBox.getSkin();
 ComboBox combo = (ComboBox)skin.getChildren().get(0);
 combo.showingProperty().addListener((obs, hidden, showing) -> {
     if(hidden) performTaskWhenPopUpCloses();});

まだ設定されていない場合 (スキンが null)、これを試してください (醜い回避策):

private final ChangeListener<Skin> skinListener = (skinObs, oldVal, newVal) -> {

    if (oldVal == null && newVal != null) {

        CheckComboBoxSkin skin = (CheckComboBoxSkin) newVal;
        ComboBox combo = (ComboBox) skin.getChildren().get(0);
        combo.showingProperty().addListener((obs, hidden, showing) -> {
            if(hidden)
                performTaskWhenPopUpCloses();

        });
    }
};

checkComboBox.skinProperty().addListener(skinListener);

(バージョン 8.40.9)

于 2015-09-14T16:43:38.587 に答える