小编viv*_*ivi的帖子

如何使用javafx.beans.binding.Bindings.select(...)进行简洁的值绑定

概观

作为Swing的十年开发人员,我对JavaFX 2.0引入的功能感到非常兴奋,特别是丰富,流畅,高级的数据绑定工具.仅此设施值得学习新API的成本(自放弃FX脚本以来,这个成本要少得多).它将直接影响我的模型/视图同步代码的可读性和可维护性.

到目前为止,我在第一级和基本派生绑定方面取得了巨大成功,但我正在努力找出将一个值绑定到数据图中两个或更多个间接值的"JavaFX方式".

问题

如下面的代码示例所示,我试图用来将javafx.beans.binding.Bindings.select()Label的文本值与ComboBox中当前所选项的一个包含属性同步.这段代码是我想要做的更复杂的一个简单例子,所以我理解用较低级别的绑定API做这件事并不难.我想知道是否可以使用更高级别的流畅API,以及该select(...)方法是否实际跟踪间接属性的更改(即,如果直接属性或所选子属性更改,则更新属性).

文档和示例select(...)很稀疏,所以我希望有这方面经验的人可以告诉我,我是否正在尝试按设计使用API​​,或者是否有另一种方法使用高级绑定API来做什么我想要.

示例代码

这是演示代码.运行时,会有一个包含两个项目的ComboBox,然后是两个标签.第一个标签显示toString()所选项目的版本.第二个标签尝试显示所选项目的一个属性,但仅显示null.

import static javafx.beans.binding.Bindings.*;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/** Testing cascading binding change triggers. */
public class SandboxTest extends Application {

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

    @Override
    public void start(Stage stage) throws Exception {

        VBox root = new VBox(8);
        root.setStyle("-fx-padding: 8;"); …
Run Code Online (Sandbox Code Playgroud)

java data-binding user-interface binding javafx-2

11
推荐指数
1
解决办法
6315
查看次数

标签 统计

binding ×1

data-binding ×1

java ×1

javafx-2 ×1

user-interface ×1