このような動作は javafx2 バインディングのバグですか? スタンドアロン アプリケーション自体が自身の状態 (xPosition、yPosition、高さ、幅など) を常に自己認識しているのは当然のことのように思えます。「Pro JavaFX 2 Java テクノロジを使用したリッチ クライアントの決定版ガイド」という本を読んでいますが、一部のコード例が機能しません。注: ここで使用したコードは私のものです。(この本は関係ありますか?)
package simplejavafxbindingquestion;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.event.EventHandler;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBuilder;
import javafx.scene.control.Label;
import javafx.scene.control.LabelBuilder;
import javafx.scene.layout.HBox;
import javafx.scene.layout.HBoxBuilder;
import javafx.scene.layout.Pane;
import javafx.scene.layout.PaneBuilder;
import javafx.scene.layout.VBox;
import javafx.scene.layout.VBoxBuilder;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextBuilder;
import javafx.stage.Stage;
public class SimpleJavaFXBindingQuestion extends Application {
@Override
public void start(final Stage stage) {
Text textBoundStageHeight;
Text textRequestedStageHeight;
final Label labelRequestedStageHeight;
VBox vBox;
HBox hBox;
Button btnRequest;
Pane sceneRoot = PaneBuilder.create()
.children(
vBox = VBoxBuilder.create()
.spacing(10)
.children(
textBoundStageHeight = TextBuilder.create()
.textOrigin(VPos.TOP)
.font(Font.font("Ariel", 20))
.build(),
hBox = HBoxBuilder.create()
.children(
textRequestedStageHeight = TextBuilder.create()
.textOrigin(VPos.TOP)
.font(Font.font("Ariel", 20))
.text("requested stage height: ")
.build(),
labelRequestedStageHeight = LabelBuilder.create()
.font(Font.font("Ariel", 20))
.text("Unknown")
.build()
)
.build(),
btnRequest = ButtonBuilder.create()
.text("Request height!")
.font(Font.font("Ariel", 15))
.onAction(new EventHandler<javafx.event.ActionEvent>() {
@Override
public void handle(javafx.event.ActionEvent event) {
labelRequestedStageHeight.setText("" + stage.getHeight());
}
})
.build()
)
.build()
)
.build();
textBoundStageHeight.textProperty()
.bind(new SimpleStringProperty("bound stage height: ")
.concat(stage.getHeight()));
Scene scene = SceneBuilder.create()
.root(sceneRoot)
.build();
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}