gpt4 book ai didi

JavaFX:节点下节点事件处理

转载 作者:行者123 更新时间:2023-12-02 14:30:36 25 4
gpt4 key购买 nike

我正在开发一个项目,其中我有一个 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/

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