如何在JavaFX 8中隐藏TableView列标题?

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中的表头?

Jam*_*s_D 9

正如在注释中所观察到的那样,在将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)

  • 它实际上解决了问题中提出的问题,该问题明确指出他需要一个没有标题的单列。如果您的问题不同,请将其作为新问题提出。 (2认同)
  • @James_D我从来没有说过它没有解决OP问题,我说它没有回答问题“如何在JavaFX 8中隐藏TableView列标题?”如果我问自己,它也会是“如何隐藏TableView列” JavaFX 8 中的标头?`然后它将是重复的...... (2认同)
  • 问题是这不是一个问题很好的问题.首先,没有足够的代码来重现问题(实际发布的代码很好,只是它执行的上下文是错误的,根据问题下面的评论中的讨论).其次,OP正在询问如何解决原始问题的错误解决方案(称为[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem).这些很难回答,因为如果你只是修复了错误的解决方案,它实际上对OP没有帮助.我在这方面不同意你,但无论如何我编辑了. (2认同)

Chr*_*utz 9

我最近遇到了隐藏列标题的问题,可以使用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)

以防有人需要替代方法.它还提供了切换列标题的灵活性.