gpt4 book ai didi

javafx - 如何知道滚动条在 JavaFx TableView 上是否可见

转载 作者:行者123 更新时间:2023-12-02 11:53:46 27 4
gpt4 key购买 nike

有没有办法知道表格 View 上是否存在滚动条? (除了我在下面的代码中所做的以外)我的目标是将 2 个箭头图像(用于关闭/打开侧面板)放置在 table 的右侧( table 上方)。但我不想把它们放在滚动条上。表格内容是搜索结果,因此有时滚动条可见,有时则不可见。如果没有足够的元素。我希望每次表格 View 项目发生变化时,箭头的位置也会发生变化。

我已经尝试了以下解决方案,但结果是第二次搜索时箭头被移动。看起来像是并发问题。就像我的监听器代码在呈现表格之前执行一样。

有办法解决吗?

tableView.getItems().addListener( (ListChangeListener<LogData>) c -> {    
// Check if scroll bar is visible on the table
// And if yes, move the arrow images to not be over the scroll bar
Double lScrollBarWidth = null;
Set<Node> nodes = tableView.lookupAll( ".scroll-bar" );
for ( final Node node : nodes )
{
if ( node instanceof ScrollBar )
{
ScrollBar sb = (ScrollBar) node;
if ( sb.getOrientation() == Orientation.VERTICAL )
{
LOGGER.debug( "Scroll bar visible : {}", sb.isVisible() );
if ( sb.isVisible() )
{
lScrollBarWidth = sb.getWidth();
}
}
}
}

if ( lLogDataList.size() > 0 && lScrollBarWidth != null )
{
LOGGER.debug( "Must move the arrows images" );
tableViewController.setArrowsDistanceFromRightTo( lScrollBarWidth );
}
else
{
tableViewController.setArrowsDistanceFromRightTo( 0d );
}} );

最佳答案

我假设您知道依赖 TableView 的内部实现不是一个好主意。话虽如此,您的代码看起来大部分都不错(我对 an infinite scrolling example 做了类似的事情)。

但是,您还应该考虑由于主窗口改变其大小而可能出现滚动条的情况。

因此,我建议您听取滚动条可见性属性的变化。

private ScrollBar getVerticalScrollbar() {
ScrollBar result = null;
for (Node n : table.lookupAll(".scroll-bar")) {
if (n instanceof ScrollBar) {
ScrollBar bar = (ScrollBar) n;
if (bar.getOrientation().equals(Orientation.VERTICAL)) {
result = bar;
}
}
}
return result;
}
...
bar.visibleProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
// tableViewController.setArrowsDistanceFromRightTo(...)
}
);

关于javafx - 如何知道滚动条在 JavaFx TableView 上是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24810197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com