如何在JavaFX中设置滚动面板的单位增量?

8
JavaFX中的ScrollBar类包含一个属性用于设置单位增量,这正是我所需要的 - 然而我找不到如何访问此ScrollBar,或者从ScrollPane类以其他方式设置单位增量!我想我一定错过了一些明显的东西 - 我该怎么做?
3个回答

6

您可以设置一个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,然后您可以根据您想要的方式调整滚动。

4

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

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

我建议您参与其中,提出您的用例,投票,看看未来是否能得到某种响应。


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 作为修饰符来加速运动。"最初的回答"

我尝试了这个,但对ScrollPane没有任何影响。 - vovahost
1
.lookup() 只能通过元素 id 进行查找。如果要按其他属性(如 CSS 类、伪类)进行搜索,则需要使用 .lookupAll() - Sergey Kirienko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接