如何更改 ScrollPane 滚动的量?

use*_*est 6 java scroll javafx

我需要知道如何更改ScrollPane对象用于上下移动内容的量。例如,ScrollBar有这两种方法:

scrollBar.setUnitIncrement(10);     
scrollBar.setBlockIncrement(50);  
Run Code Online (Sandbox Code Playgroud)

我如何用 aScrollPane而不是做同样的事情ScrollBar

Jac*_*k J 6

ScrollPane 中垂直滚动速度更快:

    final double SPEED = 0.01;
    scrollPane.getContent().setOnScroll(scrollEvent -> {
        double deltaY = scrollEvent.getDeltaY() * SPEED;
        scrollPane.setVvalue(scrollPane.getVvalue() - deltaY);
    });
Run Code Online (Sandbox Code Playgroud)


Jam*_*s_D 5

在外部样式表中你可以这样做

.scroll-pane .scroll-bar:vertical {
    -fx-unit-increment: 10 ;
    -fx-block-increment: 50 ;
}

.scroll-pane .scroll-bar:horizontal {
    -fx-unit-increment: 5 ;
    -fx-block-increment: 20 ;
}
Run Code Online (Sandbox Code Playgroud)

例如。如果您希望它仅应用于单个滚动窗格,请为滚动窗格指定一个 id 等。

  • 非常感谢,这确实改变了单击按钮{向上、向下箭头}时滚动条的调整量。但不是鼠标滚轮,有解决办法吗? (7认同)

小智 5

有同样的问题,无法找到答案。最后从Erik 提供的链接中得到了正确的方法,并根据我的需要进行了调整。

由于 scrollPane 本身没有触发“setOnScroll”-Event(可能是因为它在这样做之前被消耗了),我必须在 ScrollPane的内容上设置 EventHandler :

scrollPane_Content.setContent(vBox_Content);

    vBox_Content.setOnScroll(new EventHandler<ScrollEvent>() {
        @Override
        public void handle(ScrollEvent event) {
            double deltaY = event.getDeltaY()*6; // *6 to make the scrolling a bit faster
            double width = scrollPane_Content.getContent().getBoundsInLocal().getWidth();
            double vvalue = scrollPane_Content.getVvalue();
            scrollPane_Content.setVvalue(vvalue + -deltaY/width); // deltaY/width to make the scrolling equally fast regardless of the actual width of the component
        }
    });
Run Code Online (Sandbox Code Playgroud)

这样做可以直接使用滚动条,也可以使用鼠标滚轮上下滚动。

希望这可以帮助其他正在寻找在 scrollPane 上加快滚动速度的人。


Eri*_*agt -3

你可以使用这个:

scrollPane.getVerticalScrollBar().setUnitIncrement(20);
Run Code Online (Sandbox Code Playgroud)