CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第4章 JavaFX による GUI プログラミング : 問題 1 : テキストフィールドとラベル

問題

テキストフィールドとラベルを持つプログラムを実装せよ

ラベルのテキストは "Hello, JavaFX"、フォントは100ポイント
ユーザーがテキストフィールドを編集したらラベルのテキストを連動して更新する

解答

これこそ、まさに練習問題ですね :-)

ついでにラベルのフォントサイズに連動するスライダも付けておきます

InvalidationListenerを使用

public void start(Stage stage) throws Exception {
    // ラベル
    Label message = new Label("Hello, JavaFX!");
    message.setFont(new Font(100.0));
    // スライダ
    Slider slider = new Slider();
    slider.setValue(100);
    slider.valueProperty().addListener(
        property -> message.setFont(new Font(slider.getValue()))
    );
    // テキストフィールド
    TextField textField = new TextField(message.getText());
    textField.textProperty().addListener(
        property -> message.setText(textField.getText())
    );
    // 配置
    VBox root = new VBox();
    root.getChildren().addAll(textField, slider, message);
    stage.setScene(new Scene(root));
    stage.setTitle("Hello");
    stage.show();
}

■ 表示直後 f:id:ClosedUnBounded:20150716185655p:plain

かな漢字変換の未確定な文字も反映します
かな漢字変換f:id:ClosedUnBounded:20150716190134p:plain

ちなみにInvalidationListenerChangeListenerに変えても、動きは同じです

ChangeListenerを使用

// スライダ
slider.valueProperty().addListener(
    (property, oldValue, newValue) -> message.setFont(new Font(newValue.doubleValue()))
);
// テキストフィールド
textField.textProperty().addListener(
    (property, oldText, newText) -> message.setText(newText)
);