What is it, naokirin?

JavaFXに触れてみた Part2

この前の記事でJavaFXの簡単な紹介をしました。
JavaFXに触れてみた

今回はその続きでもう少しどのように使うかを書いていこうと思います。


前回はJavaFXのトップレベルのコンテナ(基本的にはウィンドウレベルの情報を保持している)とウィンドウ内の表示領域を管理するコンテナについて紹介しました。

今回はもう少し、ウィンドウ内での表示オブジェクトを増やして、レイアウトをどう行うかを書いてみます。

複数のオブジェクトの表示

今回はテキストを縦に並べて、「今日の献立」を表示してみましょう。

実際に表示したいウィンドウ

import javafx.application.Application
import javafx.stage.Stage
import javafx.scene.Scene
import javafx.scene.text.Text
import javafx.scene.layout.VBox


class SampleJavaFX extends Application{
  @Override
  void start(Stage stage) {
    Scene scene = new Scene(new VBox())
    ((VBox) scene.getRoot()).getChildren().addAll(new Text("今日の献立"), new Text("肉じゃが"), new Text("わかめの味噌汁"), new Text("納豆"))

    stage.setScene(scene)
    stage.show()
  }

  static void main(String[] args){
    Application.launch(this, args)
  }
}

今回はSceneにトップレベルのコンテナとして、VBoxというコンテナを渡しています。

Scene scene = new Scene(new VBox())

このコンテナはその子を縦に並べて表示するコンテナです。



つぎにそのVBoxのコンテナに子となるオブジェクトを追加します。

実際に前回オブジェクトの追加で用いたadd()メソッドで1つずつ追加していってもいいのですが、今回はもっと簡単に複数のオブジェクトを追加できるaddAll()を使っています。

((VBox) scene.getRoot()).getChildren().addAll(new Text("今日の献立"), new Text("肉じゃが"), new Text("わかめの味噌汁"), new Text("納豆"))

さらに入れ子でレイアウト

さらにトップレベルにレイアウト用のコンテナを追加して、その追加したコンテナにテキストを表示することにしてみます。

さきほどの献立を表示していた隣に必要な買い物のリストを表示してみることにします。


import javafx.application.Application
import javafx.stage.Stage
import javafx.scene.Scene
import javafx.scene.text.Text
import javafx.scene.layout.VBox
import javafx.scene.layout.HBox


class SampleJavaFX extends Application{
  @Override
  void start(Stage stage) {
    Scene scene = new Scene(new HBox())
    VBox leftVBox = new VBox()
    VBox rightVBox = new VBox()
    ((HBox) scene.getRoot()).getChildren().addAll(leftVBox, rightVBox)
    leftVBox.getChildren().addAll(new Text("今日の献立"), new Text("肉じゃが"), new Text("わかめの味噌汁  "), new Text("納豆"))
    rightVBox.getChildren().addAll(new Text("必要な買い物"), new Text("じゃが芋"), new Text("人参"), new Text("牛肉"), new Text("納豆"))

    stage.setScene(scene)
    stage.show()
  }

  static void main(String[] args){
    Application.launch(this, args)
  }
}

新しくHBoxと言うコンテナを使いました。
HBoxはVBoxと違い、横に子オブジェクトを並べます。

そのHBoxにVBoxを二つ追加します。

Scene scene = new Scene(new HBox())
VBox leftVBox = new VBox()
VBox rightVBox = new VBox()
((HBox) scene.getRoot()).getChildren().addAll(leftVBox, rightVBox)

そしてそれぞれのVBoxコンテナにテキストを追加します。

leftVBox.getChildren().addAll(new Text("今日の献立"), new Text("肉じゃが"), new Text("わかめの味噌汁  "), new Text("納豆"))
rightVBox.getChildren().addAll(new Text("必要な買い物"), new Text("じゃが芋"), new Text("人参"), new Text("牛肉"), new Text("納豆"))

まとめ

ほかにもレイアウト用のコンテナはjavafx.scene.layoutのパッケージ下にいろいろ存在します。

それらのレイアウト用コンテナを組み合わせると多くのレイアウトが可能になります。
実質、単純な階層構造なのでレイアウト自体もそれほど苦労はしないと思います。