我尝试用javafx创建一个表。单元格内容大多是短文本或数字,但列标题是长描述文本。所以我更喜欢旋转列标题中的文本
下面的代码有效,但现在的问题是当用鼠标减小列宽时,标题中的文本将缩短(末尾用省略号)。
这种行为是否可以“关闭”?还有其他建议吗?
这是我的代码:
public class TableRotHeader extends Application {
private static final Logger LOG = Logger.getLogger(TableRotHeader.class.getName());
@Override
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("horizontal\ncol header");
TableColumn colB = new TableColumn("");
final int minWidth = 25;
colA.setMinWidth(minWidth);
colB.setMinWidth(minWidth);
MyLabel l = new MyLabel("labeled attribute");
l.setRotate(-90);
l.setPrefHeight(150);
colB.setGraphic(l);
tableView.getColumns().addAll(colA, colB);
group.getChildren().add(tableView);
tableView.prefWidthProperty().bind(scene.widthProperty());
tableView.prefHeightProperty().bind(scene.heightProperty());
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
编辑:两个答案(来自James_D和Mailkov)效果很好。
我现在想要将2个标签分组以获得2条垂直线。这导致它们之间的距离。
答:如何获得合理的距离(截图中的红色箭头)?这可能是textheight * 1.2或类似
B:如何与标签的顶部和底部保持几个像素距离(蓝色箭头)?
Label label1 = new Label("col 1");
label1.setRotate(-90);
MyLabel label2 = new MyLabel("col number 2 with a long text");
label2.setRotate(-90);
label2.setStyle("-fx-background-color: white; -fx-font-weight: normal");
Group g = new Group(label1, label2);
colB.setGraphic(g);
答案 0 :(得分:2)
现在对我来说很完美。
得到这个结果......
...我使用以下代码与vbox-padding和blackOnWhite样式:
public class TableRotHeader extends Application {
@Override
public void start(Stage stage) throws IOException {
Group group = new Group();
Scene scene = new Scene(group);
scene.getStylesheets().add("com/sun/javafx/scene/control/skin/modena/blackOnWhite.css");
stage.setTitle("Table with rotated header");
stage.setWidth(800);
stage.setHeight(600);
TableView tableView = new TableView();
TableColumn colA = new TableColumn("horizontal\ncol header");
TableColumn colB = new TableColumn("");
final int minWidth = 50;
colA.setMinWidth(minWidth);
colB.setMinWidth(minWidth);
Label label1 = new Label("col 1");
Label label2 = new Label("col number 2 with a long text");
label2.setStyle("-fx-font-weight: normal");
VBox vbox = new VBox(label1, label2);
vbox.setRotate(-90);
vbox.setPadding(new Insets(5, 5, 5, 5));
Group g = new Group(vbox);
colB.setGraphic(g);
tableView.getColumns().addAll(colA, colB);
group.getChildren().add(tableView);
tableView.prefWidthProperty().bind(scene.widthProperty());
tableView.prefHeightProperty().bind(scene.heightProperty());
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
答案 1 :(得分:1)
将标签包裹在Group
:
colB.setGraphic(new Group(l));
答案 2 :(得分:1)
你可以使用setMinWidth()和setMinHeight()来实现MyLabel l