TableView中的垂直列文本

时间:2014-12-27 09:46:26

标签: javafx tableview

我尝试用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);
}
}

ellipsis should be suppressed

编辑:两个答案(来自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);

enter image description here

3 个答案:

答案 0 :(得分:2)

现在对我来说很完美。
得到这个结果......
enter image description here
...我使用以下代码与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