JavaFX中的ScrollBar类包含一个属性用于设置单位增量,这正是我所需要的 - 然而我找不到如何访问此ScrollBar,或者从ScrollPane类以其他方式设置单位增量!我想我一定错过了一些明显的东西 - 我该怎么做?
您可以设置一个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
}
});
}
...
}
在皮肤初始化后(如果滚动条可见),您应该能够使用 .lookup("scrollbar")
方法来访问它。但我不喜欢这个答案。
根据这个错误记录,我认为你没有遗漏任何东西:
我建议您参与其中,提出您的用例,投票,看看未来是否能得到某种响应。
最初的回答
@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.lookup()
只能通过元素 id 进行查找。如果要按其他属性(如 CSS 类、伪类)进行搜索,则需要使用.lookupAll()
。 - Sergey Kirienko