gpt4 book ai didi

java - 如何在 JavaFX 中获取 ScrollBar 的拇指值范围?

转载 作者:行者123 更新时间:2023-12-05 08:07:50 25 4
gpt4 key购买 nike

例如,假设我们有一个滚动条,用于在某些应用程序上显示/操作数据。滚动条也有最小值、最大值和可见数量。但是根据滚动条值显示的值的范围有点令人困惑。

以图片为例

但它是根据滚动条拇指的不同边计算的。

假设我需要显示一些来自数据库的数据,最小值将是最小 ID,最大值也将是最大 ID。并考虑我想显示 100 个元素,我将在滚动条中将可见数量设置为 100。 scrolling时如果scroolbar的值等于1,从数据库中获取range会很简单,只需要将100(可见量)加1即可,但是当该值等于max时就不行了。所以这就是为什么我需要获取滚动条拇指的值范围,但是在查看滚动条源代码时我找不到此功能的实现。

如何获取thumb的最小值和最大值或滚动条的可见值范围?

最佳答案

ScrollBar 表示一个位置,而不是一个范围。该位置可通过 value 属性获得。 visualAmount 属性确定 slider 的大小。

如果 value == max 拇指位于最右边/最底部的位置。您的“拇指最大值”将超过 max

因此,您应该决定显示多少元素并据此计算visibleAmountmax:

max           = itemCount - displayedItems
visibleAmount = max * displayedItems / itemCount

ScrollPane 类实现示例:

@Override
public void start(Stage stage) {
ScrollBar scrollBar = new ScrollBar();
scrollBar.setOrientation(Orientation.VERTICAL);
StackPane.setAlignment(scrollBar, Pos.CENTER_RIGHT);

VBox container = new VBox();
StackPane.setAlignment(container, Pos.TOP_LEFT);

StackPane root = new StackPane(container, scrollBar);

InvalidationListener listener = o -> {
// adjust scrollbar properties on resize of root or content
double rootHeight = root.getHeight();
double contentHeight = container.getHeight();

double max = Math.max(0, contentHeight - rootHeight);
scrollBar.setMax(max);
scrollBar.setVisibleAmount(max * rootHeight / contentHeight);
};
root.heightProperty().addListener(listener);
container.heightProperty().addListener(listener);

// move container up based on the scrollbar value
container.translateYProperty().bind(scrollBar.valueProperty().negate());

// generate some content
for (int i = 0; i < 10; i++) {
Rectangle rect = new Rectangle(100, 100, (i & 1) == 0 ? Color.BLACK : Color.LIGHTGRAY);
container.getChildren().add(rect);
}

Scene scene = new Scene(root, 300, 300);
stage.setScene(scene);
stage.show();
}

关于java - 如何在 JavaFX 中获取 ScrollBar 的拇指值范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52988670/

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