3

我正在使用ControlsFXCheckComboBox并想监听菜单的打开和关闭事件。有没有办法做到这一点?

我需要这个,以便在用户关闭菜单/离开字段时提交已完成的更改。在 TextFields 中,当用户按 Enter 键时,我会执行此操作,这似乎不适合使用此控件。或者,我可以尝试以focusedProperty某种方式使用。

4

2 回答 2

2

我用了

// Commit only when box closes
checkComboBox.addEventHandler(ComboBox.ON_HIDDEN, event -> {
    System.out.println("CheckComboBox is now hidden.");
});

看起来很干净。

于 2017-11-20T19:46:10.000 回答
1

老问题,但可能会帮助某人。原始来源来自:https : //bitbucket.org/controlsfx/controlsfx/issues/462/checkcombobox-ignores-prefwidth-maybe-any by Olivier Vanrumbeke

要从 CheckComboBox 到达组合框,如果皮肤不为空,请尝试以下操作:

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

如果还没有设置(皮肤为空),试试这个(丑陋的解决方法):

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 回答