2013年2月6日水曜日

FXMLで2つのスライダーを連動させてみた

昼休みに少しずつコードを書いて実験しています.
今日は2つのスライダーを連動させてみました.

まずは,FXML.Simple.fxmlという名前で次のようなXMLを書きます.

<?xml version = "1.0"?>
<?import javafx.scene.Scene?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Slider?>
<Scene width = "640" height = "480" xmlns:fx="http://javafx.com//fxml">
<VBox>
<Slider fx:id = "sliderA" />
<Slider fx:id = "sliderB" value = "${sliderA.value}" />
</VBox>
</Scene>

Sceneの中に,VBoxでSliderを2つ組み込み,それぞれにfx:idでIDを振ります.
そして,valueは式の形でsliderBの方の値はsliderAの値を見るようにします.

Javaの方は至ってシンプル.このFXMLをロードして表示するだけ.
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Simple extends Application {
    public static void main(String [] args){
        launch(args);
    }

    public void start(Stage primaryStage) throws Exception {
        Scene scene = FXMLLoader.load(getClass().getResource("Simple.fxml"));
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

これで,上側のスライダーを動かすと,下側のスライダーも動きます.
でも,下側のスライダーを動かしても上は何の反応も示しません.
双方向にするには,sliderAの方にはsliderBの値を見るようにFXMLに追加してやるだけです.

こんなに簡単にプロパティのバインドができるとは・・・$を使った部分が
どこまでできるのか,新しいオブジェクトの生成が出来るのか,とかはこれから
調べて行こうと思います.