如何解决JavaFX:同时用于两个不同事件的 EventFilter
有没有办法将 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)
所以我想在按下鼠标按钮的同时使用鼠标滚轮实现水平滚动。 提前致谢!
解决方法
事件处理程序一次在一个事件上触发,并且事件只能是单一类型。为了做您想做的事,您需要建立某种状态,然后通过事件处理程序将其关闭和打开。由于您已经捕获了 @jen@gmail
jen@gmail
.jen@gmail.com
jen.@gmail.com
&jen@gmail.com
jen@gmail.com.
和 MOUSE_PRESSED
,因此最容易建立“是否按下鼠标按钮”作为状态。然后检查事件处理程序内部的状态以进行滚动。
像这样:
MOUSE_RELEASED
我要补充一点,我可以让滚动事件处理程序触发的唯一方法是使用鼠标上的滚轮。单击滚动条并拖动它不会触发该事件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。