【发布时间】:2021-06-09 09:26:42
【问题描述】:
有没有办法同时处理MouseEvent.MOUSE_PRESSED 事件和ScrollEvent.ANY?我想在触发两个事件时做出反应。目前鼠标按下时,滚动不生效。
public class HorizonScroll extends Application {
public final int SCENE_WIDTH = 800;
public final int SCENE_HEIGHT = 600;
@Override
public void start(Stage stage) {
Pane root = new Pane();
ScrollPane scrollPane = new ScrollPane();
scrollPane.setPrefSize(100,600);
scrollPane.setHmax(1000);
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
scrollPane.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
System.out.println("Pressed");
});
scrollPane.addEventFilter(MouseEvent.MOUSE_RELEASED, e -> {
System.out.println("Released");
});
scrollPane.addEventFilter(ScrollEvent.ANY, e -> {
System.out.println("Scrolling");
});
Scene scene = new Scene(root, SCENE_WIDTH, SCENE_HEIGHT);
stage.setTitle("HorizonScroll");
stage.setScene(scene);
root.getChildren().addAll(scrollPane);
stage.show();
}
public static void main(String[] args) {
launch();
}
这是我现在的假人。我想要实现的是:
...
scrollPane.addEventFilter(Inputevent.ANY, e -> {
if(e.getEventType() == SCROLL && e.getEventType() == MOUSE_PRESSED) {
//scrollPane.setHvalue( + 10 or whatever)
所以我想在按下鼠标按钮的同时使用鼠标滚轮实现水平滚动。 提前致谢!
【问题讨论】:
-
据我所知,您必须自己编写代码(例如,通过在按下/释放时切换一些标志)。嗯..你想达到什么目的?
-
似乎一个节点一次只能处理一个事件。我想在点击时水平滚动。
-
我想在点击时水平滚动不明白你的意思 - 所以和往常一样的过程:minimal reproducible example 请:)
-
@kleopatra 我发布了我的代码被剪断了。希望这能更好地描述我的问题。
-
按照建议,只需在鼠标按下/释放时设置/取消设置标志,并在滚动事件处理程序中检查它。 FWIW,我只使用触控板,我认为您在此处实现的功能无法使用触控板执行。
标签: javafx event-handling mouseevent