JavaFx, как выровнять только один заголовок столбца в табличном представлении?

Как выровнять заголовок только одного столбца в табличном представлении?
Следующий CSS выравнивает весь заголовок столбца, но я хочу выровнять только один столбец:

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

4 ответа

Решение

Вы можете сделать это сейчас с последними версиями JavaFX.

Java 1.7

Это работало для меня с Java: 1.7.0_45 / JavaFX: 2.2.45-b18). Это должна быть последняя версия, потому что она требует RT-14909

Заголовок столбца автоматически получит тот же "Id", что и TableColumn! Поэтому вашим 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 часов, чтобы понять. Надеюсь, что это помогает другим сейчас!

Java 8

По причинам, которые я не понимаю, трюк идентификатора больше не работает для Java 8. Однако, что мы можем сделать, это установить styleClass непосредственно для столбца (который внутренне распространяется в TableColumnHeader) и изменить этот styleClass в файле css:

В Java:

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

И в CSS:

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

У меня работает здесь с jdk1.8.0_05 на Mac OS X.

Я боролся с этим сам, но нашел это решение. Это выровняет по правому краю один столбец, тогда как остальные столбцы в той же таблице будут выровнены по левому краю:

В коде:

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

В CSS:

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

Ни одно из этих решений не помогло мне (не знаю почему). Я использую jdk1.8.0_66 на Windows.

Это немного взломать, но это работает:

// 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);
  }    
}));

@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;

}
Другие вопросы по тегам