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

时间:2014-05-10 03:42:46

标签: java javafx javafx-8 javafx-css

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

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

4 个答案:

答案 0 :(得分:13)

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

Java 1.7

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

列标题将自动获得相同的" Id"作为TableColumn!因此,您的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为我工作。

答案 1 :(得分:1)

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

在代码中:

object

在CSS中:

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

答案 2 :(得分: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;

}

答案 3 :(得分: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);
  }    
}));