基于this example(选项1),我通过在TableView
中使用2个SplitPane
来创建固定列。
显示其他列(而不是固定列)的TableView
可能会太宽,以致显示ScrollBar
,为此我必须用-fx-padding: 0 0 13px 0;
进行补偿才能保留{{ TableRow
的1}}个对齐。
因此,我现在必须确定是否显示TableView
或找到一种完全不同的方法来确保ScrollBar
的对齐方式。不幸的是,这种明显的方法似乎没有用。 (TableRow
不是ScrollBar
,我只是没有发布代码来确保这一点)
null
由于某些原因,ScrollBar horizontalScrollBar = (ScrollBar) lookup(".scroll-bar:horizontal");
horizontalScrollBar.visibleProperty().addListener((observable, oldValue, newValue) -> {
System.out.println(newValueobservableScrollBar);
});
出现或消失时不会触发监听器。
答案 0 :(得分:0)
因此,为了弄清楚某个滚动条是否可见,我首先必须找到它,因此我查找了该特定表上的所有滚动条。
Set<Node> scrollBars = itemsTableView.lookupAll(".scroll-bar");
然后过滤集合以检索我要查找的特定滚动条(在我的情况下为水平)
Optional<Node> horizontalScrollBar = scrollBars.stream()
.filter(node ->
((ScrollBar) node).getOrientation().equals(Orientation.HORIZONTAL))
.findAny();
然后将侦听器附加到滚动条的可见性
horizontalScrollBar.ifPresent(node ->
node.visibleProperty().addListener((observable, oldValue, newValue) -> {
if(newValue)
{
columnTableView.setStyle("-fx-padding: 0 0 13px 0;");
} else
{
columnTableView.setStyle("-fx-padding: 0 0 0 0;");
}
})
);
看起来几乎完全正确吗?好吧,一想到
lookup(".scroll-bar:horizontal");
不返回水平滚动条,而是返回第一个(垂直)滚动条。除非您意识到这一点,否则您的应用程序将表现得有些神秘。