【问题标题】:JavaFX Boolean Binding and TableView Binding multipleJavaFX Boolean Binding 和 TableView Binding 多个
【发布时间】:2018-12-10 16:36:45
【问题描述】:

我想将一个 Button 绑定到两个特定的约束。

其中一个已经实现:

deleteGroupage.disableProperty().bind(Bindings.isEmpty(tableView.getSelectionModel().getSelectedItems()));

这是针对我的 tableView 的,当没有选择任何内容以避免 Nullpointer 时,您无法按下按钮删除某些内容。 但是现在我还有一个静态登录变量,它告诉用户是访客 == false 还是他已登录 == true。

boolean loggedIn = LoginController.loggedIn;

如何绑定这两者?用户需要登录并在表格中选择一行。

details.setDisable(loggedIn);

这不起作用,因为绑定与 Java 比 this setter 更相关。

【问题讨论】:

    标签: button javafx binding


    【解决方案1】:

    您可以使用Bindings.or

    喜欢:

    deleteGroupage.disableProperty().bind(Bindings.isEmpty(tableView.getSelectionModel().getSelectedItems()).or(Bindings.createBooleanBinding(() -> !LoginController.loggedIn));
    

    或:

    deleteGroupage.disableProperty().bind(Bindings.or(Bindings.isEmpty(tableView.getSelectionModel().getSelectedItems()),Bindings.createBooleanBinding(() -> !LoginController.loggedIn)));
    

    或使用 fabian 的效率建议:

    deleteGroupage.disableProperty().bind(Bindings.createBooleanBinding(() -> tableView.getSelectionModel().getSelectedItems().isEmpty() || !LoginController.loggedIn, tableView.getSelectionModel().getSelectedItems()));
    

    通过使用此解决方案,我假设当您将其绑定到按钮的 disaableProperty() 时,信息 LoginController.loggedIn 已经存在

    编辑:抱歉,您必须使用 or 而不是 and,它应该可以工作。我已经更正了

    【讨论】:

    • 好吧,没关系,它不能正常工作。当我登录但没有选择一行时,我仍然可以按下按钮@Sunflame
    • 对于第一个版本,我收到错误:无法在原始类型 void @Sunflame 上调用和 (BooleanBinding)
    • 答案已更新。如果您需要,我可以粘贴我编写的整个示例。
    • 为什么要创建多个绑定,如果一个就可以了? Bindings.createBooleanBinding(() -> tableView.getSelectionModel().getSelectedItems().isEmpty() || !LoginController.loggedIn, tableView.getSelectionModel().getSelectedItems())
    • 是的,确实,效率更高。
    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2014-07-10
    • 2014-03-19
    • 2022-09-27
    • 2013-10-22
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多