use*_*927 5 java javafx columnheader tableview
我需要有一个可观察的类型列表,该列表将显示在带有一个列的TableView中,选中后将在右侧显示其余信息.TableView包含在TitledPane中,它包含在Accordion中.见下图:

正如您在此场景中看到的,我不想显示列标题.
Pane header = (Pane) list.lookup("TableHeaderRow");
header.setMaxHeight(0);
header.setMinHeight(0);
header.setPrefHeight(0);
header.setVisible(false);
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不适用于JavaFX 8.查找("TableHeaderRow")方法返回null,这使我认为"TableHeaderRow"选择器不再存在.
是否有更新的解决方法来删除/隐藏JavaFX 8中的表头?
正如在注释中所观察到的那样,在将CSS应用于节点之后,查找才起作用,该节点通常在显示节点的第一帧渲染上.只要您在显示表格后执行已发布的代码,您建议的解决方案就可以正常工作.
在这种情况下,为了更好的方法,没有标题的单列"表"只是一个ListView.它ListView具有类似于用于s 的单元渲染机制TableColumn(但是更简单,因为您不必担心多个列).我会ListView在你的场景中使用a ,而不是黑客攻击css使标题消失:
ListView<Album> albumList = new ListView<>();
albumList.setCellFactory((ListView<Album> lv) ->
new ListCell<Album>() {
@Override
public void updateItem(Album album, boolean empty) {
super.updateItem(album, empty);
if (empty) {
setText(null);
} else {
// use whatever data you need from the album
// object to get the correct displayed value:
setText(album.getTitle());
}
}
}
);
albumList.getSelectionModel().selectedItemProperty()
.addListener((ObservableValue<? extends Album> obs, Album oldAlbum, Album selectedAlbum) -> {
if (selectedAlbum != null) {
// do something with selectedAlbum
}
);
Run Code Online (Sandbox Code Playgroud)
我最近遇到了隐藏列标题的问题,可以使用css解决它.
我创建了一个styleclass:
.noheader .column-header-background {
-fx-max-height: 0;
-fx-pref-height: 0;
-fx-min-height: 0;
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到TableView:
tableView.getStyleClass().add("noheader");
Run Code Online (Sandbox Code Playgroud)
以防有人需要替代方法.它还提供了切换列标题的灵活性.