如何在JavaFX中设置滚动窗格的单位增量?

java javafx-2 javafx scrollpane

3749 观看

3回复

43875 作者的声誉

JavaFX中的ScrollBar类包含一个用于设置单位增量的属性,这就是我所追求的 - 但是我无法找到如何获取此ScrollBar,或者从ScrollPane类中设置其他方式的单位增量!我认为我必须遗漏一些明显的东西 - 我该如何实现这一目标?

作者: Michael Berry 的来源 发布者: 2013 年 7 月 16 日

回应 (3)


4

6195 作者的声誉

决定

从技术上讲,.lookup("scrollbar")在初始化外观之后(如果滚动条可见),您应该可以使用该方法来实现它。我不喜欢那个答案。

根据这个错误机票,我认为你没有遗漏任何东西:

我鼓励你跳过它,展示你的用例,投票,看看你是否可以在将来得到某种回应。

作者: Nick Rippe 发布者: 16.07.2013 10:06

6

5473 作者的声誉

您可以将ScrollEventListener设置为ScrollPane,从而覆盖原始行为。这样,例如,我实现了一个水平滚动而不是垂直滚动的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,然后就可以根据需要调整滚动。

作者: Sebastian 发布者: 18.07.2013 08:38

0

3620 作者的声誉

我最终使用的是:

  @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);
  }
作者: Galya 发布者: 12.03.2019 07:15
32x32