gpt4 book ai didi

events - JavaFx 按钮事件冒泡

转载 作者:行者123 更新时间:2023-12-02 06:13:00 33 4
gpt4 key购买 nike

我正在开发一个在 java8 中使用 javafx 的项目。我关注了一个奇怪的情况:包含一个按钮 (javafx.scene.control.Button) 和另一个 Pane 的面板(属于 javafx.scene.layout.Pane 类)。我希望鼠标单击事件会冒泡到父级。但这只是我单击 Pane 时的情况,而当我单击按钮时不会发生。下面是具有此行为的一个非常简单示例的代码。有人有解决这个问题的建议吗?我知道我可以基于 Pane 创建自己的按钮..但这只是一个令人讨厌的解决方法。干杯

    package application;

import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.util.Duration;


public class Main extends Application {

double curScale;


@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());


Button btn = new Button("test");
btn.setLayoutX(50);
Pane p2 = new Pane();
p2.setPrefSize(20,20);
p2.setStyle("-fx-background-color: #440000");
Pane p = new Pane();
p.getChildren().add(btn);
p.getChildren().add(p2);

root.setTop(p);

p.setOnMouseClicked(new EventHandler<Event>() {

@Override
public void handle(Event event) {
System.out.println("event source " + event.getSource() + " target : " + event.getTarget());

}
});

primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
launch(args);
}
}

最佳答案

默认情况下,按钮将消耗鼠标单击事件,而 Pane 则不会。

如果您想使用父 Pane 事件处理程序拦截按钮鼠标单击,那么您应该使用 event filter这样做(在捕获阶段而不是冒泡阶段拦截事件)。

阅读event processing如果您需要了解捕获与冒泡概念。

关于events - JavaFx 按钮事件冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23777186/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com