假设我有一个visibleProperty()
的Control,它绑定到应用程序某处的BooleanProperty
。
我想要实现的是在另一段代码中添加一个额外的绑定,以确保可见性是例如总是假的,无论是现有的还是即将发生的绑定。但是,如果存在返回false的绑定,则永远不可能将visiblity设置为true。所以我需要实现一种布尔逻辑。
第一次尝试是使用OR / AND-concatinations。
tableColumn.visibleProperty().and(Bindings.createBooleanBinding(() -> false));
但正如您在以下示例中所看到的,这可能无法正常工作。
public static void main(String[] args) {
BooleanProperty a = new SimpleBooleanProperty(false);
BooleanProperty b = new SimpleBooleanProperty(true);
a.bind(b);
System.out.println(a.get());
a.and(Bindings.createBooleanBinding(() -> false));
System.out.println(a.getValue());
}
也许有人有更有创意的想法。
Thx,Marry
答案 0 :(得分:2)
在这种情况下,您只需添加一个附加绑定到visibleProperty
。
示例:强>
第一个visibleProperty
的{{1}}绑定到Button
的{{1}},因此当您按下切换按钮时,该按钮可见或不可见。
如果按下第三个按钮,则新的绑定会添加到第一个selectedProperty
的{{1}},ToggleButton
始终保持visibleProperty
。从这一刻起Button
无效。
false
重要说明:如果切换绑定的顺序(首先是false,然后是ToggleButton
的绑定),结果会有所不同。在这种情况下,可见性将根据切换的选定状态而改变(您可以认为是第二个"覆盖"第一个)。
注意#2:在您执行此操作的示例中:
BorderPane root = new BorderPane();
Button b = new Button("Button");
ToggleButton tb = new ToggleButton("Make Button invisible");
b.visibleProperty().bind(tb.selectedProperty().not());
Button overrideBinding = new Button("Make Button invisible forever");
overrideBinding.setOnAction(e -> b.visibleProperty().bind(new SimpleBooleanProperty(false)));
root.setCenter(new VBox(b, tb, overrideBinding));
在第一行您要创建新的ToggleButton
,但不要将其分配到任何地方,因此它对a.and(Bindings.createBooleanBinding(() -> false));
System.out.println(a.getValue());
没有影响。
您可以更新它以将结果视为:
BooleanBinding
注意#3:如果您尝试按照示例
创建绑定a
最有可能产生BooleanBinding andBinding = a.and(Bindings.createBooleanBinding(() -> false));
System.out.println(andBinding.getValue());
。