0

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 は変更しません。また、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: ]

また、テキスト プロパティをバインドしようとしましたが、動作します (TextField の 1 つのテキストを変更すると、他のテキストも変更されます)。

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

それで、私はスタイルプロパティで何が間違っていますか?

4

2 に答える 2

1

StyleStyleClassは2つの異なるプロパティです。CSSファイルで定義されたCSSセレクターのリストを含みStyleながら、;分離されたproperty:valueペアを含みます。StyleClassあなたが次のようなことを試みた場合、あなたのハンドラーで

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

それ以外の

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

tb2の背景色も変化することがわかります。タスクを実行するには、listchangeリスナーを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 に答える