如何收听CheckComboBox的开/关事件?

时间:2014-08-07 08:21:30

标签: javafx controlsfx

我正在使用ControlsFX' CheckComboBox并想要收听菜单的开启和关闭事件。有没有办法做到这一点?

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

2 个答案:

答案 0 :(得分:1)

我用过

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

看起来很干净。

答案 1 :(得分:0)

老问题但可能对某人有所帮助。原始资料来自:Olivier Vanrumbeke的https://bitbucket.org/controlsfx/controlsfx/issues/462/checkcombobox-ignores-prefwidth-maybe-any

要从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)