当前位置: 首页 > 知识库问答 >
问题:

如何访问滚动窗格的滚动条

龙德海
2023-03-14

我正在尝试获取一些关于ScrollBar组件的信息,这些组件按标准包含在ScrollPane中。特别是我对阅读水平滚动条高度感兴趣。我怎么参考?

共有1个答案

宰父深
2023-03-14

由于提到的方法并不适合所有人(包括我),我进一步调查了一下,找到了问题的根源。

通常,这两种方法都起作用,但只有在ScrollPaneSkin属性设置好之后才起作用。在我的例子中,在使用FXMLLoader加载我的视图后,skin仍然为null

如果skin属性尚未初始化(使用一次性侦听器),则延迟调用可以解决问题。

工作锅炉板代号:

ScrollPane scrollPane;
// ...
if (scrollPane.getSkin() == null) {
    // Skin is not yet attached, wait until skin is attached to access the scroll bars
    ChangeListener<Skin<?>> skinChangeListener = new ChangeListener<Skin<?>>() {
        @Override
        public void changed(ObservableValue<? extends Skin<?>> observable, Skin<?> oldValue, Skin<?> newValue) {
            scrollPane.skinProperty().removeListener(this);
            accessScrollBar(scrollPane);
        }
    };
    scrollPane.skinProperty().addListener(skinChangeListener);
} else {
    // Skin is already attached, just access the scroll bars
    accessScrollBar(scrollPane);
}

private void accessScrollBar(ScrollPane scrollPane) {
    for (Node node : scrollPane.lookupAll(".scroll-bar")) {
        if (node instanceof ScrollBar) {
            ScrollBar scrollBar = (ScrollBar) node;
            if (scrollBar.getOrientation() == Orientation.HORIZONTAL) {
                // Do something with the horizontal scroll bar

                // Example 1: Print scrollbar height
                // System.out.println(scrollBar.heightProperty().get());

                // Example 2: Listen to visibility changes
                // scrollBar.visibleProperty().addListener((observable, oldValue, newValue) -> {
                //     if(newValue) {
                //         // Do something when scrollbar gets visible
                //     } else {
                //         // Do something when scrollbar gets hidden
                //     }
                // });
            }
            if (scrollBar.getOrientation() == Orientation.VERTICAL) {
                // Do something with the vertical scroll bar
            }

        }
    }
}
 类似资料:
  • 我希望能够向下滚动动态生成的电影列表。我尝试添加滚动窗格。 我在页面的开头有一个导航栏,中间有一个包含所有电影的jpanel。 您可以使用以下代码重新创建此示例: 我想做的是用我的鼠标滚轮向下滚动这个电影列表,而不看任何滚动条。它现在看起来应该和现在一模一样,但我希望能够向下滚动,看到所有的电影。 我不知道为什么它不起作用,这就是为什么我在这里问,希望有人能向我解释我做错了什么。

  • 问题内容: 我已经创建了JTextpane并在textpane中插入了组件(像Jtextarea这样的组件)。当我在该JTextpane中插入新组件时,JTextpane的Jscrollpane(的垂直滚动条)会自动设置为底部。我想将其设置为最高位置。我怎样才能做到这一点 感谢Sunil Kumar Sahoo 问题答案: 这是我使用的实用程序类。可用于滚动到的顶部,底部,左侧,右侧或水平/垂直中

  • 问题内容: 我正在尝试获取有关标准中包含的组件的信息。特别是我对阅读水平书感兴趣。我该如何引用? 问题答案: 由于上述方法并不适合所有人(包括我),因此我对其进行了更多调查,并找到了问题的根源。 一般而言,这两种方法都可以使用,但是只有在设置了的属性后才能使用。就我而言,仍然是在使用加载视图后仍然存在。 通过在属性未初始化的情况下延迟调用(使用单次侦听器)可以解决此问题。 工作样板代码:

  • 问题我如何可以嵌入这个应用程序到SPlitPane,在左边将是另一个面板。 不幸的是,代码导致了错误的坐标,

  • 基于此注释https://stackoverflow.com/a/29530135/1387524,我添加了一个ScrollPane,以便在画布移到可见区域之外时使用滚动。

  • 给定一个带有一些子节点的巨大的是的内容,我如何滚动以使当前视口之外的子节点之一可见?