JavaFX:节点下节点事件处理

标签 java javafx

我正在开发一个项目,其中我有一个 GUI(BorderPane)和 StackPane 中的可移动 map (Pane),但是当我想单击 map 或其子元素之一时,事件处理程序仅在 GUI 上处理。我该如何解决这个问题?

我将所有对象放在“ map ” Pane 中,然后将此 Pane 移到另一个 Pane 中。

这是一些代码:

Pane Map = new Pane();
Map.getChildren().addAll(...);
Map.setLayoutX(0);
Map.setLayoutY(0);
Map.setOnMouseClicked(e-> System.out.println("Click1"));

GUI = new BorderPane();
GUI.getChildren().addAll(...);
GUI.setOnMouseClicked(e -> System.out.println("Click2"));

MovableMap = new Pane();
MovableMap.getChildren().add(Map);
MovableMap.setOnMouseClicked(e -> System.out.println("Click3"));

StackPane root = new StackPane();
root.getChildren().addAll(MovableMap,GUI);
root.setOnMouseClicked(e -> System.out.println("Click4"));

最佳答案

不久前我也遇到了同样的问题。当您以某种方式将所有 Pane (不仅是 StackPane)放在彼此之上时,它们似乎都会吞下所有事件。我只能通过手动布局 GUI Pane 来解决这个问题。从概念上讲,我做了这样的事情:

    private BorderPane root;
    private MapPane mapPane;
    private GUIPane guiPane;

    @Override
    public void start(Stage stage) {
        root = new BorderPane();
        mapPane = new MapPane();            
        guiPane = new GUIPane();

        guiPane.setManaged(false);

        root.setCenter(mapPane);
        root.getChildren().add(guiPane);

        Scene scene = new Scene(root, 800, 600);

        stage.setScene(scene);
        stage.show();

        guiPane.autosize();
        guiPane.layoutXProperty().bind(root.widthProperty().subtract(guiPane.widthProperty()).divide(2));
        guiPane.setLayoutY(20);
    }

它对我有用,但我很想听到更好的解决方案。

关于JavaFX:节点下节点事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379109/

相关文章:

java - Robolectric 阴影不工作

java - 未找到文件异常2

java - Spring Batch 中环境变量的网格大小

java - 在java中加密和解密字符串

java - 调用一个从scala代码接受 `<? super T>`类型参数的java方法?

javafx - 我在哪里为 JavaFX 提交错误?

java - 使用 apache commons-exec 运行 git clone : how to input password?

java - Maven 需要额外的依赖来构建项目,而 Gradle 不需要

Java- 'if' 语句被忽略?

JavaFX PathTransition 动画未播放