Как javafx скрыть фоновый заголовок таблицы?
Я пытаюсь разработать автозаполненный текст, который показывает выпадающий список предложений во всплывающем окне просмотра таблицы, и у меня возникла проблема, как я могу скрыть весь заголовок столбца таблицы в javafx 2.1
3 ответа
Примените пользовательскую таблицу стилей к таблице:
table.getStylesheets().addAll(getClass().getResource("hidden-tableview-headers.css").toExternalForm());
Где файл hidden-tableview-headers.css
находится в том же месте, что и класс, загружающий ресурс css, и содержит строку:
.column-header-background { visibility: hidden; -fx-padding: -1em; }
visibility: hidden
Атрибут указывает JavaFX не рисовать узел, но по-прежнему оставлять место, где был заголовок. Так как заголовок имеет высоту 1 строки высоты текста, вы можете указать невидимому заголовку не занимать места, установив -fx-padding: -1em;
,
Решение очень простое; после рендеринга табличного представления мы можем получить заголовок таблицы и сделать его невидимым, поэтому заголовок таблицы не нужно перекомпоновывать при изменении макета табличного представления. Чтобы поймать рендеринг таблицы, мы можем использовать изменение свойства width и скрыть заголовок таблицы
Вот код:
tableView.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
// Get the table header
Pane header = (Pane)tableView.lookup("TableHeaderRow");
if(header!=null && header.isVisible()) {
header.setMaxHeight(0);
header.setMinHeight(0);
header.setPrefHeight(0);
header.setVisible(false);
header.setManaged(false);
}
}
});
Если вы не хотите добавлять дополнительный файл.css, вы можете использовать существующий CSS:
.hide-header .column-header-background {
visibility: hidden; -fx-padding: -1em;
}
куда .hide-header
случайное имя, которое вы должны добавить в свой код Java:
table.getStyleClass().add("hide-header");