JavaFX 中的ScrollBar类包含一个用于设置单位增量的属性,这就是我所追求的 - 但是我找不到如何获取此 ScrollBar,或者从ScrollPane类中以其他方式设置单位增量!我想我一定遗漏了一些明显的东西——我该如何做到这一点?
问问题
4902 次
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")
在皮肤初始化后使用该方法访问它(如果滚动条可见)。不过我不喜欢这个答案。
根据此错误票,我认为您没有遗漏任何东西:
- 如何访问 ScrollPane 控件中的 ScrollBar 组件?
https://bugs.openjdk.java.net/browse/JDK-8091864
我鼓励你跳上去,展示你的用例,投票,看看你将来是否能得到某种回应。
于 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 回答