基于this example (选项1),我正在通过在SplitPane
中使用2个TableView
来创建一个固定列。显示其他列(而不是固定列)的TableView
可能会变得非常宽,从而显示一个ScrollBar
,为了保持两个TableView
的TableRow
对齐,我必须用-fx-padding: 0 0 13px 0;
进行补偿。
因此,我现在必须弄清楚ScrollBar
是否正在显示,或者找到一种完全不同的方法来确保TableRow
对齐。不幸的是,显而易见的方法似乎不起作用。( ScrollBar
不是null
,我只是没有发布代码以确保
ScrollBar horizontalScrollBar = (ScrollBar) lookup(".scroll-bar:horizontal");
horizontalScrollBar.visibleProperty().addListener((observable, oldValue, newValue) -> {
System.out.println(newValueobservableScrollBar);
});
由于某些原因,当ScrollBar
出现或消失时,侦听器不会被触发。
发布于 2018-07-02 08:32:13
因此,为了弄清楚一个特定的滚动条是否是visibile,我首先必须找到它,所以我查找了那个特定表上的所有滚动条。
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");
不返回水平滚动条,而是返回第一个(垂直)滚动条。除非你意识到这一点,否则你的应用程序会表现得有点神秘。
https://stackoverflow.com/questions/51075499
复制相似问题