Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFX8中隐藏TableView列标题?_Java_Javafx_Tableview_Columnheader - Fatal编程技术网

如何在JavaFX8中隐藏TableView列标题?

如何在JavaFX8中隐藏TableView列标题?,java,javafx,tableview,columnheader,Java,Javafx,Tableview,Columnheader,我需要有一个类型的可观察列表,该列表将显示在一个带有一列的TableView中,当选中该列表时,它将在右侧显示其其余信息。TableView用标题窗格包装,标题窗格用手风琴包装。见下图: 正如您在本场景中看到的,我不想显示列标题 我尝试按照说明进行操作,结果是: 但是,它似乎不适用于JavaFX8。lookup(“TableHeaderRow”)方法返回null,这使我认为“TableHeaderRow”选择器不再存在 JavaFX 8中是否有删除/隐藏表头的更新解决方案?如注释中所述,在将C

我需要有一个类型的可观察列表,该列表将显示在一个带有一列的TableView中,当选中该列表时,它将在右侧显示其其余信息。TableView用标题窗格包装,标题窗格用手风琴包装。见下图:

正如您在本场景中看到的,我不想显示列标题

我尝试按照说明进行操作,结果是:

但是,它似乎不适用于JavaFX8。lookup(“TableHeaderRow”)方法返回null,这使我认为“TableHeaderRow”选择器不再存在


JavaFX 8中是否有删除/隐藏表头的更新解决方案?

如注释中所述,在将CSS应用于节点(通常在显示该节点的第一帧渲染中)之前,查找不起作用。只要在表显示后执行发布的代码,建议的解决方案就可以正常工作

为了更好地处理这种情况,没有标题的单列“表”只是一个
ListView
ListView
有一个类似于用于
TableColumn
s的属性(但更简单,因为您不必担心多个列)。我会在您的场景中使用
列表视图
,而不是通过修改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
        }
);
ListView albumList=新建ListView();
albumList.setCellFactory((ListView lv)->
新ListCell(){
@凌驾
public void updateItem(相册相册,布尔空){
super.updateItem(相册,空);
if(空){
setText(空);
}否则{
//使用相册中需要的任何数据
//对象以获取正确的显示值:
setText(album.getTitle());
}
}
}
);
albumList.getSelectionModel().SelectEditeProperty()

.addListener((observeValue我最近遇到了隐藏列标题的问题,可以使用css解决

我创建了一个样式类:

.noheader .column-header-background {
    -fx-max-height: 0;
    -fx-pref-height: 0;
    -fx-min-height: 0;
}
并将其添加到TableView中:

tableView.getStyleClass().add("noheader");

以防有人需要另一种方法。它还提供了切换列标题的灵活性。

此外,我建议现在就使用这种方法

tableView.skinProperty().addListener((a, b, newSkin) -> {
    TableHeaderRow headerRow = ((TableViewSkinBase) 
newSkin).getTableHeaderRow();
    ...
});

这可以在初始化期间执行,上面提到的另一个方法如果在初始化期间运行,将返回null。

不需要CSS、样式或皮肤操作。只需创建TableView的子类并覆盖resize,如下所示

class XTableView extends TableView {
    @Override
    public void resize(double width, double height) {
        super.resize(width, height);
        Pane header = (Pane) lookup("TableHeaderRow");
        header.setMinHeight(0);
        header.setPrefHeight(0);
        header.setMaxHeight(0);
        header.setVisible(false);
    }
}

从2017年6月起,这在Java 8中运行良好。

您可以使用
列表视图
而不是
表视图
,因为您只有一列?我可以验证查找id在JavaFX 8中仍然可用。
列表
引用的是
表视图
?@James_D我可以,但我有一个需要使用的相册列表h这样,如果选择了相册,则需要将相册对象的其余部分从表传递到右侧窗格。TableView直接与对象一起工作,而ListView则需要我分别处理相册名称和对象的索引。如果我错了,请告诉我,谢谢。@ItachiUchiha感谢您的确认ion。它实际上是一个TableView,所以我不明白为什么它会返回null。正如你在截图中看到的,这就是我正在使用的表。在ListView上设置一个cell factory。谢谢你的澄清。我不知道cell factory,所以一旦我了解它的工作原理,这看起来就更简单了。干杯!否决票,是吗不要回答原来的问题,请回答问题,然后提出更好的解决问题的方法,然后再投票,谢谢。这实际上解决了问题中提出的问题,清楚地表明他需要一个没有标题的单栏。如果你的问题不同,请作为新问题提问。@James\u D我从来没有说过没有解决OPs问题,我说它没有回答问题
如何在JavaFX8中隐藏TableView列标题?
如果我问我自己的问题,它也会是
如何在JavaFX8中隐藏TableView列标题?
,然后它会是一个重复的问题…问题是它不是一个很好的问题。首先,没有足够的代码来复制问题(实际发布的代码是好的,只是根据问题下面评论中的讨论,它执行的上下文是错误的)。其次,OP询问如何修复原始问题的错误解决方案(称为。这些问题很难回答,因为如果您只是修复错误的解决方案,实际上对OP没有帮助。我不同意您的观点,但我还是进行了编辑。如果在tableView初始化期间使用,则返回null。需要调用,仅在呈现tableView之后。
class XTableView extends TableView {
    @Override
    public void resize(double width, double height) {
        super.resize(width, height);
        Pane header = (Pane) lookup("TableHeaderRow");
        header.setMinHeight(0);
        header.setPrefHeight(0);
        header.setMaxHeight(0);
        header.setVisible(false);
    }
}