0

我需要在两个 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没有;此外,systemouts 显示样式不相等:

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: ]

另外,我尝试绑定他们的 text 属性,并且它可以工作(当我更改其中一个 TextField 中的文本时,另一个中的文本也会更改):

tb2.textProperty().bindBidirectional(tb1.textProperty());

那么,我在 Style Property 上做错了什么?

4

2 回答 2

1

Style并且StyleClass是两个不同的属性。Style包括;分隔property:value对,同时StyleClass包括 CSS 文件中定义的 CSS 选择器列表。在您的处理程序中,如果您尝试类似

tb1.setStyle("-fx-background-color: red");

代替

tb1.getStyleClass().clear();
tb1.getStyleClass().add("green");

您会看到tb2的背景颜色也会发生变化。要完成您的任务,请尝试将列表更改侦听器添加到 styleClass 可观察列表。

于 2012-06-21T13:21:22.040 回答
1

我能够以这种方式实现样式绑定:

SimpleStringProperty dynamicProperty = new SimpleStringProperty("-fx-background-color: " +     "#d6d6d6");
Text title = new Text("Test");
title.setId("textID");
dynamicProperty.bindBidirectional(title.styleProperty());

当对 dynamicProperty 对象调用 setValue() 方法时,它会更新 Text 对象的样式属性。我建议您对两个对象(tb1,tb2)进行双向绑定。

SimpleStringProperty dynamicProperty = new SimpleStringProperty("-fx-background-color: " + "#d6d6d6");
dynamicProperty.bindBidirectional(tb1.styleProperty());
dynamicProperty.bindBidirectional(tb2.styleProperty());
于 2014-03-21T21:02:44.160 回答