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