Javafx 当TableView没有项目时,如何防止水平滚动条隐藏?

Javafx 当TableView没有项目时,如何防止水平滚动条隐藏?,javafx,javafx-11,Javafx,Javafx 11,我正在开发一个JavaFX应用程序,并使用TableView显示数据库中的数据。列并不总是水平放置,因此会出现水平滚动条。我的用户要求提供每列过滤功能,我实现了这一功能,将文本字段放入表列标题中,并使用FilteredList对表内容进行过滤。当用户键入时,过滤器谓词将更新。这很管用,用户很喜欢。但有一个棘手的问题。当被过滤的列位于TableView的普通视口之外,并且用户过滤掉TableView刚刚重置的所有数据时,水平滚动条将隐藏。从这里无法访问过滤文本字段,因为它位于视口之外,并且水平滚动

我正在开发一个JavaFX应用程序,并使用TableView显示数据库中的数据。列并不总是水平放置,因此会出现水平滚动条。我的用户要求提供每列过滤功能,我实现了这一功能,将文本字段放入表列标题中,并使用FilteredList对表内容进行过滤。当用户键入时,过滤器谓词将更新。这很管用,用户很喜欢。但有一个棘手的问题。当被过滤的列位于TableView的普通视口之外,并且用户过滤掉TableView刚刚重置的所有数据时,水平滚动条将隐藏。从这里无法访问过滤文本字段,因为它位于视口之外,并且水平滚动条不可用。当TableView没有项目时,是否有方法防止水平滚动条隐藏?我在API文档中没有找到任何内容。

在查看TableViewSkin和TableViewSkinBase的源代码后,我想出了一个快速而肮脏的解决方法:

    tv.setSkin(new TableViewSkin<Document>(tv) {
        @Override
        protected int getItemCount() {
            return super.getItemCount()+1;
        }
    });
tv.setSkin(新的TableViewSkin(tv){
@凌驾
受保护的int getItemCount(){
返回super.getItemCount()+1;
}
});
它伪造了一个额外的行,因此当表为空时触发的代码永远不会运行。
最后一行数据后的额外空间不会影响我的用户。

不受支持,您需要自定义VirtualFlow进行破解