JavaFx如何在tableview中只对齐一个列标题?

如何在tableview中只对齐一列的标题?
以下css对齐所有列标题,但我想只对齐一列:

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

您现在可以使用最新版本的JavaFX执行此操作。

Java 1.7

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

列标题将自动获得与TableColumn相同的“Id”! 因此,您的TableColumn需要一个(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小时才弄明白。 希望这有助于其他人吧!

Java 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。

我自己也捣乱了,但找到了这个解决方案。 这将右对齐单个列,而同一个表中的其余列左对齐:

在代码中:

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

在CSS中:

 .column-header.rightAlignedTableColumnHeader > .label { -fx-alignment: center-right; } 

@DOM @ void256值得我尝试你的代码,它工作正常。 我也尝试了这个代码,它的工作原理是我必须使用左上角,因为CENTER_RIGHT不起作用。 我正在使用带有eclipse luna的jre 1.8.0_45另一个奇怪的问题是,如果你在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; } 

这些解决方案都不适合我(不知道为什么)。 我在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); } }));