5

如何在表格视图中仅对齐一列的标题?
以下 css 对齐所有列标题,但我只想对齐一列:

.table-view .column-header .label{
    -fx-alignment:CENTER
}
4

4 回答 4

16

您现在可以使用最新版本的 JavaFX 做到这一点。

Java 1.7

这对我来说适用于 Java:1.7.0_45 / JavaFX:2.2.45-b18)。它应该是最新版本,因为它需要RT-14909

列标题将自动获得与 TableColumn 相同的“Id”!因此,您的 TableColumn(s) 需要一个 (CSS-) Id,您可以在 Scenebuilder 中直接为 TableColumn 设置它,也可以使用类似tableColumn.setId("my-special-column").

然后,您可以直接使用 Id 设置列标题的样式:

.table-view .column-header#my-special-column .label {
  -fx-alignment: CENTER_RIGHT;
  -fx-text-fill: red;
}

PS:这让我花了一些令人沮丧的 1,5 个小时才弄清楚。希望这对其他人有帮助!

爪哇 8

由于我不理解 id 技巧不再适用于 Java 8 的原因。但是,我们可以做的是直接为列设置一个 styleClass(在内部传播到 TableColumnHeader),并在 css 文件中更改这个 styleClass:

在 Java 中:

firstNameCol.getStyleClass().add("my-special-column-style");

在 CSS 中:

.my-special-column-style .label {
  -fx-alignment: CENTER_RIGHT;
  -fx-text-fill: red;
}

在 Mac OS X 上使用 jdk1.8.0_05 为我工作。

于 2014-05-14T15:03:26.050 回答
2

我自己为此苦苦挣扎,但找到了这个解决方案。这将右对齐单个列,而同一表中的其余列左对齐:

在代码中:

myCol.getStyleClass().add("rightAlignedTableColumnHeader");

在 CSS 中:

.column-header.rightAlignedTableColumnHeader > .label {
    -fx-alignment: center-right;
}
于 2016-04-05T09:48:13.620 回答
0

@DOM @void256 值得我尝试你的代码,它工作正常。我也尝试了这段代码,它可以解决我必须使用左上角的难题,因为 CENTER_RIGHT 不起作用。我正在使用 jre 1.8.0_45 和 eclipse luna 另一个奇怪的问题是,如果你在 Scene Builder 中设置它,它不适用于标题文本,但适用于列文本

public void initialize(URL arg0, ResourceBundle arg1) {
    firstNameColumn.getStyleClass().add("top-left");
    lastNameColumn.getStyleClass().add("any-this-works-here;");
    phoneNumberColumn.getStyleClass().add("top-left;");
    emailAddressColumn.getStyleClass().add("top-left;");
}


.table-view .column-header .label{
    -fx-font-size: 12pt;
    -fx-text-fill: blue;
    -fx-alignment:top-left;

}
于 2015-06-09T00:15:35.803 回答
0

这些解决方案都不适合我(不知道为什么)。我在 Windows 上使用 jdk1.8.0_66。

这有点像黑客,但它有效:

// Hack: align column headers to the center.  
table.widthProperty().addListener((src, o, n) -> Platform.runLater(() -> {
  if (o != null && o.intValue() > 0) return; // already aligned
  for (Node node: table.lookupAll(".column-header > .label")) {
    if (node instanceof Label) ((Label)node).setAlignment(Pos.CENTER);
  }    
}));
于 2015-10-22T21:04:40.493 回答