Binding 如何在没有侦听器的情况下绑定阶段属性?

Binding 如何在没有侦听器的情况下绑定阶段属性?,binding,javafx,Binding,Javafx,这样的行为是javafx2绑定中的一个bug吗? 独立应用程序本身总是自我告知自己的状态(xPosition、yPosition、height、width等),这似乎是合乎逻辑的。 我正在阅读《Pro JavaFX 2 Java技术富客户机权威指南》一书,其中一些代码示例根本不起作用。注意:我在这里使用的代码是我的。(这本书相关吗?) package simplejavafxbindingquestion; 导入javafx.application.application; 导入javafx.b

这样的行为是javafx2绑定中的一个bug吗? 独立应用程序本身总是自我告知自己的状态(xPosition、yPosition、height、width等),这似乎是合乎逻辑的。 我正在阅读《Pro JavaFX 2 Java技术富客户机权威指南》一书,其中一些代码示例根本不起作用。注意:我在这里使用的代码是我的。(这本书相关吗?)

package simplejavafxbindingquestion;
导入javafx.application.application;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.event.EventHandler;
导入javafx.geometry.VPos;
导入javafx.scene.scene;
导入javafx.scene.SceneBuilder;
导入javafx.scene.control.Button;
导入javafx.scene.control.ButtonBuilder;
导入javafx.scene.control.Label;
导入javafx.scene.control.LabelBuilder;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.HBoxBuilder;
导入javafx.scene.layout.Pane;
导入javafx.scene.layout.PaneBuilder;
导入javafx.scene.layout.VBox;
导入javafx.scene.layout.VBoxBuilder;
导入javafx.scene.text.Font;
导入javafx.scene.text.text;
导入javafx.scene.text.TextBuilder;
导入javafx.stage.stage;
公共类SimpleJavaFXBindingQuestion扩展了应用程序{
@凌驾
公共作废开始(最后阶段){
Text Text boundstageheight;
Text Text requestedstageheight;
最终标签标签要求阶段高度;
VBox-VBox;
HBox-HBox;
按钮BTN请求;
Pane sceneRoot=PaneBuilder.create()
.儿童(
vBox=VBoxBuilder.create()
.间距(10)
.儿童(
textBoundStageHight=TextBuilder.create()
.textOrigin(VPos.TOP)
.font(font.font(“Ariel”,20))
.build(),
hBox=HBoxBuilder.create()
.儿童(
textRequestedStageHight=TextBuilder.create()
.textOrigin(VPos.TOP)
.font(font.font(“Ariel”,20))
.text(“要求的舞台高度:”)
.build(),
labelRequestedStageHeight=LabelBuilder.create()
.font(font.font(“Ariel”,20))
.文本(“未知”)
.build()
)
.build(),
btnRequest=ButtonBuilder.create()
.text(“请求高度!”)
.font(font.font(“Ariel”,15))
.onAction(新的EventHandler(){
@凌驾
公共无效句柄(javafx.event.ActionEvent){
labelRequestedStageHeight.setText(“+stage.getHeight());
}
})
.build()
)
.build()
)
.build();
textBoundStageHeight.textProperty()
.bind(新的SimpleStringProperty(“绑定的阶段高度:”)
.concat(stage.getHeight());
Scene-Scene=SceneBuilder.create()
.根(香茅)
.build();
舞台场景;
stage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
通过说“此行为”,我假设您在中提到了“stage.getHeight()”

正如javadoc中记录的那样,该行为不是一个bug:

。。。另外,如果另一个对象是ObservalEvalue的实现, 其他对象中的更改将自动反映在 结果字符串表达式

因此,由于
stage.getHeight()
不是
ObservableValue
,因此不会观察到高度值的变化。另一方面,
stage.heightProperty()
实现了
observeValue

textBoundStageHeight.textProperty()
            .bind(new SimpleStringProperty("bound stage height: ")
            .concat(stage.heightProperty()));
textBoundStageHeight.textProperty()
            .bind(new SimpleStringProperty("bound stage height: ")
            .concat(stage.getHeight()));
textBoundStageHeight.textProperty()
            .bind(new SimpleStringProperty("bound stage height: ")
            .concat(stage.heightProperty()));