TableView没有项目时,如何防止水平滚动条隐藏?
How to prevent horizontal scroll bar getting hidden when TableView has no items?
我正在开发 JavaFX 应用程序并使用 TableView 显示数据库中的数据。列并不总是水平排列,因此会出现水平滚动条。我的用户请求每列过滤器功能,我实现了将 TextField 放入 table 列 header 并使用 FilteredList 用于 table 内容。当用户输入时,过滤器谓词得到更新。这有效,用户喜欢它。但是有一个讨厌的角落案例。当被过滤的列位于 TableView 的正常视口之外并且用户过滤掉 TableView 刚刚重置的所有数据时,水平滚动条被隐藏。从这里无法访问过滤 TextField,因为它在视口之外并且水平滚动条不可用。当 TableView 没有项目时,有没有办法防止水平滚动条被隐藏?我在 API 文档中没有找到任何内容。
在查看了 TableViewSkin 和 TableViewSkinBase 的源代码后,我想出了一个快速但肮脏的解决方法:
tv.setSkin(new TableViewSkin<Document>(tv) {
@Override
protected int getItemCount() {
return super.getItemCount()+1;
}
});
它伪造了一个额外的行,因此当 table 为空时触发的代码永远不会运行。
最后一行数据后的额外 space 不会打扰我的用户。
我正在开发 JavaFX 应用程序并使用 TableView 显示数据库中的数据。列并不总是水平排列,因此会出现水平滚动条。我的用户请求每列过滤器功能,我实现了将 TextField 放入 table 列 header 并使用 FilteredList 用于 table 内容。当用户输入时,过滤器谓词得到更新。这有效,用户喜欢它。但是有一个讨厌的角落案例。当被过滤的列位于 TableView 的正常视口之外并且用户过滤掉 TableView 刚刚重置的所有数据时,水平滚动条被隐藏。从这里无法访问过滤 TextField,因为它在视口之外并且水平滚动条不可用。当 TableView 没有项目时,有没有办法防止水平滚动条被隐藏?我在 API 文档中没有找到任何内容。
在查看了 TableViewSkin 和 TableViewSkinBase 的源代码后,我想出了一个快速但肮脏的解决方法:
tv.setSkin(new TableViewSkin<Document>(tv) {
@Override
protected int getItemCount() {
return super.getItemCount()+1;
}
});
它伪造了一个额外的行,因此当 table 为空时触发的代码永远不会运行。 最后一行数据后的额外 space 不会打扰我的用户。