JavaFX の SplitPane の存在は知っていたが使う機会が無かったので使い方を知らないまま今日に至っています。
とりあえず簡単な使い方だけでも知っておこうとググってみたのですが日本語での情報を見つけることができませんでした。(>_<。)
しかたないので API ドキュメントをサラッと 読んで 眺めてみることにしました。
Class SplitPane
http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/SplitPane.html#getDividerPositions–
縦、横の指定や分割位置などが設定できるようでメソッド数も少なくシンプルなものです。
ただ、私の英語力及び Java 力では理解できないものがあり目から汗が出ています。
Example に sp.setDividerPositions(0.3f, 0.6f, 0.9f); とあるんだけど
最後の引数の 0.9f は無くてもいいんじゃないの?
最後のスペースは自動計算されるはずでは?
なぜなんだろう?
何か意味があるはずなんだろうけど・・・
と言うことでサクッとプログラムを組んで動作確認してみました。
上記のように ? の状態なのでこれであっているか自信はありません。
ラベルをみっつ均等に表示させ、左のラベルは全体の33パーセントより小さくさせない、右のラベルは全体の33パーセントより大きくさせないという制限も付加してみました。
package jp.yucchi.trysplitpane;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
*
* @author Yucchi
*/
public class TrySplitPane extends Application {
@Override
public void start(Stage primaryStage) {
Group root = new Group();
SplitPane sp = new SplitPane();
final StackPane sp1 = new StackPane();
sp1.getChildren().add(new Label("堀北真希"));
final StackPane sp2 = new StackPane();
sp2.getChildren().add(new Label("新垣結衣"));
final StackPane sp3 = new StackPane();
sp3.getChildren().add(new Label("綾瀬はるか"));
sp.getItems().addAll(sp1, sp2, sp3);
// 均等に分割
sp.setDividerPositions(0.333f, 0.666f);
// 真希ちゃんラベルを33パーセントより小さくさせない。
sp1.minWidthProperty().bind(sp.widthProperty().multiply(0.333));
// はるかちゃんラベルを33パーセントより大きくさせない。
sp3.maxWidthProperty().bind(sp.widthProperty().multiply(0.333));
root.getChildren().add(sp);
Scene scene = new Scene(root, 300, 30);
sp.prefWidthProperty().bind(scene.widthProperty());
sp.prefHeightProperty().bind(scene.heightProperty());
primaryStage.setTitle("Hello SplitPane");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
このプログラムの実行結果は下図のようになります。
初期状態
左の Divider を右へドラッグして左のラベルを大ききします。
左の Divider を左へドラッグして左のラベルを小さくしようとしますが制限がかかっていて小さくなりません。
右の Divider を右へドラッグして中央のラベルを大きくします。
右の Divider 左へドラッグして右のラベルを大きくしようとしますが制限がかかっておおきくなりません。
これって以外と便利に使えるかもしれないですね。
なんで日本語の情報がないんだろう?
シンプルすぎてスルーされているんだろうか?
最後に、ラベルのテキストは私個人の好みであり所属する会社の公式な好みではありません。(ヲヒ