以编程方式清除选择时调用的组合框操作



我正在使用这段代码尝试从组合框中删除get's selected的项,我想对它做进一步的处理,但问题是应该从列表中删除所选的值。以下是我用来填充下拉的内容

unpickedRoles = FXCollections.observableArrayList();
rollenDropdown.setItems(unpickedRoles);

unpickedRoles.addAll(Rol.DIRECTIE, Rol.MANAGER, Rol.MVOC, Rol.STAKEHOLDER);   
@FXML
private void selectRol(ActionEvent event) {
Rol selected = rollenDropdown.getSelectionModel().getSelectedItem();
if (selected != null) {
rollenDropdown.getSelectionModel().clearSelection();
rollenDropdown.getItems().remove(selected);
}
}

现在,当一个选择与第一个不同时,每当调用代码get时,rollenDropdown.getSelectionModel().clearSelection();函数似乎会在内部调用该代码,如果不调用javafx操作,我如何删除该选择?为什么只有在没有选择第一个的情况下才会发生这种情况?

编辑:这可能与一个项目被取消选择有关,从而回忆起方法

编辑2:添加空检查对没有帮助

亲切问候Jasper

如果您担心Platform.runLater执行操作的未指定时间,可以尝试以下方法。

这种方法有效地使用AnimationTimer在当前脉冲结束时运行所需的操作。

考虑到它可能的性能问题(在文档中提到(,我更喜欢只在多线程情况下使用Platform.runLater。

@FXML
private void selectRol(ActionEvent event) {
Rol selected = rollenDropdown.getSelectionModel().getSelectedItem();
if (selected != null) {
doEndOfPulse(() -> {
rollenDropdown.setValue(null);
rollenDropdown.getItems().remove(selected);
});
}
}
/**
* Executes the provided runnable at the end of the current pulse.
*
* @param runnable runnable to execute
*/
public static void doEndOfPulse(final Runnable runnable) {
new AnimationTimer() {
@Override
public void handle(final long now) {
runnable.run();
stop();
}
}.start();
}

根据如何从组合框中删除所选元素,我必须使用Platform.runLater(),以确保在对选择进行任何操作之前处理好属性更改。这是工作代码:

@FXML
private void selectRol(ActionEvent event) {
Rol selected = rollenDropdown.getSelectionModel().getSelectedItem();
if (selected != null) {
Platform.runLater(() -> {
rollenDropdown.setValue(null);
rollenDropdown.getItems().remove(selected);
});
}
}

相关内容

  • 没有找到相关文章

最新更新