对StyleClass使用bindBidirectional()方法

时间:2012-06-21 12:01:14

标签: javafx-2

我需要在两个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做错了什么?

2 个答案:

答案 0 :(得分:1)

StyleStyleClass是两个不同的属性。 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());