我正在使用ControlsFX的CheckComboBox并想监听菜单的打开和关闭事件。有没有办法做到这一点?
我需要这个,以便在用户关闭菜单/离开字段时提交已完成的更改。在 TextFields 中,当用户按 Enter 键时,我会执行此操作,这似乎不适合使用此控件。或者,我可以尝试以focusedProperty
某种方式使用。
我正在使用ControlsFX的CheckComboBox并想监听菜单的打开和关闭事件。有没有办法做到这一点?
我需要这个,以便在用户关闭菜单/离开字段时提交已完成的更改。在 TextFields 中,当用户按 Enter 键时,我会执行此操作,这似乎不适合使用此控件。或者,我可以尝试以focusedProperty
某种方式使用。
我用了
// Commit only when box closes
checkComboBox.addEventHandler(ComboBox.ON_HIDDEN, event -> {
System.out.println("CheckComboBox is now hidden.");
});
看起来很干净。
老问题,但可能会帮助某人。原始来源来自: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)