【Java】JavaFX TableViewのColumn Headerを縦表示にする(※縦書きではない)

TableViewのカラムヘッダーを縦表示にしたくてGoogle先生に相談したところ,日本語の参考資料が見当たらなかったのでメモ。

TableViewやTableColumnにパラメータがあって,なんか設定するのかと思ったけど,どうやら違うみたいで,LabelをこちょこちょしてColumnに渡してやるみたいです。

public void start(Stage stage) throws IOException {
    Group group = new Group();
    Scene scene = new Scene(group);
    stage.setTitle("Table with rotated header");
    stage.setWidth(800);
    stage.setHeight(600);

    TableView tableView = new TableView();
    TableColumn colA = new TableColumn("normal header");
    TableColumn colB = new TableColumn(""); ←縦にするほうのラベルはとりあえず空文字列

    final int minWidth = 25;
    colA.setMinWidth(minWidth);
    colB.setMinWidth(minWidth);

    Label label = new Label("vertical label");
    label.setRotate(90);
    label.setPrefHeight(150);
    colB.setGraphic(label); ←作成したラベルをGraphicとしてセットする

    tableView.getColumns().addAll(colA, colB);

    group.getChildren().add(tableView);
    tableView.prefWidthProperty().bind(scene.widthProperty());
    tableView.prefHeightProperty().bind(scene.heightProperty());
    stage.setScene(scene);
    stage.show();
}

こんな感じで実装するとcolBのヘッダーが縦にローテートされて表示されます。

ラベルを別に作って回転させてGraphicとしてセットするみたいですね。

Graphicでラベルをセットするっていうのがしっくりきませんが,とりあえず表面的にはこうすればいいという感じです。

(深追いしていないのでもっと適切なアプローチがあるなどご指摘いただければありがたいです)

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください