如何更改ScrollPane滚动的数量?

时间:2015-09-23 12:12:12

标签: java scroll javafx

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

scrollBar.setUnitIncrement(10);     
scrollBar.setBlockIncrement(50);  

如何使用ScrollPane代替ScrollBar

5 个答案:

答案 0 :(得分:3)

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

由于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
        }
    });

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

希望这有助于其他正在寻求加快滚动滚动的人。

答案 1 :(得分:0)

在ScrollPane中更快地垂直滚动:

python2 and

答案 2 :(得分:0)

这通过查看内容和滚动窗格之间的高度差异来修复滚动,以便滚动的数量相同。

//Fix scroll pane slow scrolling
scrollPane.getContent().setOnScroll(scrollEvent -> {
    double deltaY = scrollEvent.getDeltaY();
    double contentHeight = scrollPane.getContent().getBoundsInLocal().getHeight();
    double scrollPaneHeight = scrollPane.getHeight();
    double diff = contentHeight - scrollPaneHeight;
    if (diff < 1) diff = 1;
    double vvalue = scrollPane.getVvalue();
    scrollPane.setVvalue(vvalue + -deltaY/diff);
});

将差值设置为最小值 1 以防止被零除。

答案 3 :(得分:-1)

您可以使用:

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

答案 4 :(得分:-1)

在外部样式表中,您可以

.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 ;
}
例如,

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