JavaFX按钮使鼠标事件消失
我希望有人可以帮助我解决一些小问题。我正试图跟踪鼠标在屏幕上的位置,我一直没有问题。但是,当它通过一个按钮时,它会停止跟踪。有没有人有任何想法可以解决这个问题?这里是我试图处理的更广泛的问题的一个简单的例子:JavaFX按钮使鼠标事件消失
double x, y;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage pStage) {
BorderPane bp = new BorderPane();
Scene scene = new Scene(bp, 500, 500);
pStage.setTitle("Show Circle");
pStage.setScene(scene);
pStage.show();
VBox centre = new VBox();
centre.setAlignment(Pos.CENTER);
centre.setPadding(new Insets(20, 20, 20, 20));
Button btn = new Button("hello");
centre.setPadding(new Insets(10, 10, 10, 10));
Label info = new Label("x: " + x + "\ny: " + y);
info.setPadding(new Insets(10, 10, 10, 10));
info.setFont(Font.font("Courier New", FontWeight.BOLD, 18));
centre.getChildren().addAll(info, btn);
bp.setCenter(centre);
x = 0;
y = 0;
scene.setOnMouseMoved(e -> {
x = e.getX();
y = e.getY();
info.setText("x: " + x + "\ny: " + y);
});
}
在此先感谢!
的按钮添加新的鼠标移动事件也,如果你想跟踪鼠标光标在按钮上方的位置也
btn.setOnMouseMoved(e -> {
x = e.getX();
y = e.getY();
info.setText("x: " + x + "\ny: " + y);
});
这将给你关于按钮的坐标。如果你想在尊重场景的位置(坐标),然后使用
x = e.getSceneX();
y = e.getSceneY();
使用鼠标移动的事件处理程序,并得到x和y使用event.getSceneX()和event.getSceneY()方法就像为:
btn.setOnMouseMoved(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
x = t.getSceneX();
y = t.getSceneY();
info.setText("x: " + x + "\ny: " + y);
}
});
太谢谢你了!这样一个简单的解决方案,我一直没有能够修复的天,哈哈 –
总是WC! @AngiePinchbeck –
应用程序停止跟踪鼠标事件,因为默认值(和预期)行为控制是消耗他们接收所有的鼠标事件。也就是说,这些鼠标事件不会冒泡(Event Delivery Process)给他们的父母。由此,只要在按钮上执行鼠标动作,场景节点(以及按钮的所有其他父节点)就停止接收鼠标事件。
另一个解决方案是在活动期间使用事件过滤器过滤器,因为被称为捕获阶段,因此前JavaFX的内部事件处理程序消耗的控制鼠标事件:
scene.addEventFilter(MouseEvent.MOUSE_MOVED, event -> {
x = event.getSceneX();
y = event.getSceneY();
info.setText("x: " + x + "\ny: " + y);
});
非常感谢! –