我需要在两个TextField之间建立下一个依赖关系:当我点击它们中的任何一个时,它们都会改变它们的样式。
我试图这样做:
tb2.styleProperty().bindBidirectional(tb1.styleProperty());
tb1.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
System.out.println(tb1.styleProperty().toString());
System.out.println(tb2.styleProperty().toString());
tb1.getStyleClass().clear();
tb1.getStyleClass().add("green");
System.out.println(tb1.styleProperty().toString());
System.out.println(tb2.styleProperty().toString());
}
});
但它不起作用:tb1在点击后改变它的样式,但是tb2没有; 此外,系统输出显示样式不相等:
StringProperty [bean: TextField[id=tb1, styleClass=green], name: style, value: ]
StringProperty [bean: TextField[id=tb2, styleClass=text-input text-field], name: style, value: ]
StringProperty [bean: TextField[id=tb1, styleClass=green], name: style, value: ]
StringProperty [bean: TextField[id=tb2, styleClass=text-input text-field], name: style, value: ]
此外,我试图绑定他们的文本属性,它的工作原理(当我在其中一个TextFields中更改文本时,另一个文本也发生了变化):
tb2.textProperty().bindBidirectional(tb1.textProperty());
那么,我对Style Property做错了什么?
答案 0 :(得分:1)
Style
和StyleClass
是两个不同的属性。 Style
包括;
个property:value
对,而StyleClass
包含CSS文件中定义的CSS选择器列表。在你的处理程序中,如果你尝试类似
tb1.setStyle("-fx-background-color: red");
而不是
tb1.getStyleClass().clear();
tb1.getStyleClass().add("green");
您会看到tb2
的背景颜色也会发生变化。要完成任务,请尝试将列表更改侦听器添加到styleClass可观察列表。
答案 1 :(得分:1)
我能够以这种方式实现样式绑定:
SimpleStringProperty dynamicProperty = new SimpleStringProperty("-fx-background-color: " + "#d6d6d6");
Text title = new Text("Test");
title.setId("textID");
dynamicProperty.bindBidirectional(title.styleProperty());
当在dynamicProperty对象上调用setValue()方法时,它会更新Text对象的style属性。我建议你对两个对象(tb1,tb2)进行双向绑定。
SimpleStringProperty dynamicProperty = new SimpleStringProperty("-fx-background-color: " + "#d6d6d6");
dynamicProperty.bindBidirectional(tb1.styleProperty());
dynamicProperty.bindBidirectional(tb2.styleProperty());