如何将不同类型的Property绑定_使用绑定表达式

如何将不同类型的Property绑定_使用绑定表达式

我们知道,相同的 Property 可以直接调用 bind 进行绑定。

而不同类型的 Property 则不能。

现在,我想令 textProperty 和 booleanProperty 进行绑定:

当 booleanProperty 为 true 或 false 时,同步修改 textProperty.

那么,有何方案?

使用绑定表达式可以作为一个解决方案。

效果展示

示例代码

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class PropertyBindingExample extends Application {

    private Parent createContent() {
        VBox root = new VBox(10);

        CheckBox CheckBox = new CheckBox("CheckBox");
        Label label = new Label("Not checked");

        label.textProperty().bind(Bindings.when(CheckBox.selectedProperty()).then("Checked").otherwise("Not checked"));

        root.getChildren().addAll(CheckBox, label);

        return root;
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle(this.getClass().getSimpleName());
        primaryStage.setScene(new Scene(createContent(), 400, 300));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
}

代码说明

在这段代码中,我们使用下面一行代码完成了从 textProperty 到 booleanProperty 的绑定:

label.textProperty().bind(Bindings.when(CheckBox.selectedProperty()).then("Checked").otherwise("Not checked"));

label.textProperty().bind(...) 中,... 可以是一个绑定表达式。

表达式的内容是:

Bindings.when(CheckBox.selectedProperty()).then("Checked").otherwise("Not checked")

这段表达式的意思是,当 CheckBox.selectedProperty() 为 true 的时候,绑定到内容 Checked, 否则绑定到内容 Not checked.

posted @ 2023-06-23 09:54  JavaFX_HowTo  阅读(47)  评论(0编辑  收藏  举报