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

标签 java css javafx

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

以图片为例

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

假设我需要显示一些来自数据库的数据,最小值将是最小 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/

相关文章:

java - java中如何将2Darray转换为2D ArrayList?

java - AES javafx 程序在按下加密按钮时显示错误

java - 导入 javax.jnlp 库时出错

html - 如何使用 CSS 在我的导航菜单中移动第二个子项

javascript - 这是谁的错? CSS 还是 JavaScript?

html - 如何在 css 中的输入类型文本和输入按钮之间提供空间?

java - 编辑: Model for TableView with dynamic column number

java - 当 ComboBox 的文本发生变化时,如何触发 JavaFX 中的代码?

java - 如何禁用/启用 jackson SerializationFeature.WRAP_ROOT_VALUE?

java - 如何在另一个字符串中搜索一个字符串?