首页 > 解决方案 > JavaFX8:用于 textproperty 内容的 BooleanBinding disabledProperty 不起作用

问题描述

我试图为节点的禁用属性创建布尔绑定。如果 textProperty 值确实以定义的字符串结尾,则应启用节点:

myheckbox.disabledProperty().bind(Bindings.createBooleanBinding(()
                -> myLabel.getText().endsWith(".txt"), myLabel.textProperty()));

由于以下原因无法编译:对于 ReadOnlyBooleanProperty 类型的方法 bind(BooleanBinding) 未定义

我该如何绑定这个?该复选框最初是禁用的,如果标签包含以“.txt”结尾的文件名,则应启用该复选框

标签: javafxjavafx-8

解决方案


您正在尝试绑定错误的属性。有两个与节点的禁用状态相关的属性:

  1. Node#disabled(只读)

    指示这是否Node被禁用。如果在场景图中将其自身或其祖先之一设置为 true,则ANode将被禁用。disable

  2. Node#disable(读写)

    定义 this 的单个禁用状态Node。设置disable为 true 将导致这个Node和任何子节点被禁用。此属性应仅用于设置 a 的禁用状态Node。为了查询 a 的禁用状态,应该使用Node该属性,因为即使其上的单个状态为 false ,a 也可能由于祖先被禁用而被禁用。disabledNodedisableNode

您需要绑定后一个属性。

myheckbox.disableProperty().bind(Bindings.createBooleanBinding(()
                -> myLabel.getText().endsWith(".txt"), myLabel.textProperty()));

推荐阅读