允许平移时,JavaFX的ScrollPane窗格显示所有鼠标事件:
{{1}}
如何限制ScrollPane仅针对鼠标中间事件进行平移,同时仍允许所有事件进入StackPane的内容?
答案 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
事件,您就可以在MousePressed
和MouseReleased
中设置和取消设置窗格的位置:
ScrollPane sp = ...
sp.setOnMousePressed(e -> {
if (e.getButton() == MouseButton.MIDDLE) sp.setPannable(true);
});
sp.setOnMouseReleased(e -> {
if (e.getButton() == MouseButton.MIDDLE) sp.setPannable(false);
});