作为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)