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でラベルをセットするっていうのがしっくりきませんが,とりあえず表面的にはこうすればいいという感じです。
(深追いしていないのでもっと適切なアプローチがあるなどご指摘いただければありがたいです)
コメント