8

JavaFX 中的ScrollBar类包含一个用于设置单位增量的属性,这就是我所追求的 - 但是我找不到如何获取此 ScrollBar,或者从ScrollPane类中以其他方式设置单位增量!我想我一定遗漏了一些明显的东西——我该如何做到这一点?

4

3 回答 3

6

您可以为 ScrollPane 设置一个 ScrollEventListener,从而覆盖原始行为。这样,例如,我实现了一个水平滚动而不是垂直滚动的 ScrollPane。这是我的代码的相关部分的样子:

public class Overview extends ScrollPane {

...



  private void setupHorizontalScrolling() {
    this.setOnScroll(new EventHandler<ScrollEvent>() {
      @Override
      public void handle(ScrollEvent scrollEvent) {
        double deltaY = scrollEvent.getDeltaY()*2; // *2 to make the scrolling a bit faster
        double width = Overview.this.getContent().getBoundsInLocal().getWidth();
        double hvalue = Overview.this.getHvalue();
        Overview.this.setHvalue(hvalue + -deltaY/width); // deltaY/width to make the scrolling equally fast regardless of the actual width of the component
      }
    });
  }

...

}

为了满足您的要求,您只需将调用 get/setHvalue 的行更改为 get/setVvalue,然后您可以根据需要调整滚动。

于 2013-07-18T08:38:39.970 回答
4

从技术上讲,您应该能够.lookup("scrollbar")在皮肤初始化后使用该方法访问它(如果滚动条可见)。不过我不喜欢这个答案。

根据此错误票,我认为您没有遗漏任何东西:

我鼓励你跳上去,展示你的用例,投票,看看你将来是否能得到某种回应。

于 2013-07-16T22:06:35.020 回答
2

我最终使用的是:

  @FXML
  private ScrollPane scrollPane;

  @FXML
  public void initialize() {
    Platform.runLater(() -> setFasterScroller(scrollPane));
  }

  private static void setFasterScroller(ScrollPane scrollPane) {
    ScrollBar verticalScrollbar = (ScrollBar) scrollPane.lookup(".scroll-bar:vertical");
    double defaultUnitIncrement = verticalScrollbar.getUnitIncrement();
    verticalScrollbar.setUnitIncrement(defaultUnitIncrement * 3);
  }

这会修改垂直滚动条的速度,这是您想要更频繁地执行的操作,但也可以更改.scrollbar:horizontal为。3用作加速运动的修饰符。

于 2019-03-12T07:15:59.237 回答