JavaFX:如何仅在中键上创建ScrollPane平移?

时间:2016-02-05 19:58:28

标签: javafx javafx-2

允许平移时,JavaFX的ScrollPane窗格显示所有鼠标事件:

{{1}}

如何限制ScrollPane仅针对鼠标中间事件进行平移,同时仍允许所有事件进入StackPane的内容?

2 个答案:

答案 0 :(得分:7)

您应该使用除内容事件处理程序中的中间按钮事件之外的所有事件:

// Let the ScrollPane.viewRect only pan on middle button.
imageLayer.addEventHandler(MouseEvent.ANY, event -> {
    if(event.getButton() != MouseButton.MIDDLE) event.consume();
});

这是有效的,因为ScrollPane也通过事件处理程序进行平移,并且自下而上调用事件处理程序。因此,如果我们通过子节点使用事件,它将无法访问进行平移的ScrollPane viewRect。

答案 1 :(得分:0)

一旦setPannable查找MouseDrag事件,您就可以在MousePressedMouseReleased中设置和取消设置窗格的位置:

ScrollPane sp = ...
sp.setOnMousePressed(e -> {
  if (e.getButton() == MouseButton.MIDDLE) sp.setPannable(true);
});
sp.setOnMouseReleased(e -> {
  if (e.getButton() == MouseButton.MIDDLE) sp.setPannable(false);
});