一直在尝试和搜索,但找不到任何解决方案,所以我最终决定放弃并进一步询问...

创建一个Javafx应用程序后,我将图块加载到TilePane中。

该磁贴是可单击的,并导致其各自内容的详细信息页面。

在每个图块上,如果它们确实属于某个包,那么我会显示该包的名称,该名称也可以单击并导致显示该特定包内容的页面。

因此,这意味着可以单击容器(即窗格)(即窗格),并且在其顶部还具有可轻敲的标签。发生的是,当我单击Label时,它也触发了窗格onMousePressed()...这是磁贴创建代码的一部分,该部分专注于onMousePressed()。我试图通过双击使“窗格”做出反应,并通过单击使“标签”起作用,但是我想单击以使窗格打开。

对于解决该问题的任何想法,我将不胜感激。

public DownloadTile (Downloadable upload, MainApp mainApp) {
    _mainApp = mainApp;
    _upload = upload;
    _tile = new Pane();
    _tile.setPrefHeight(100);
    _tile.setPrefWidth(296);
    _tile.setStyle("-fx-background-color: #ffffff;");
    _tile.setCursor(Cursor.HAND);
}

public void refresh() {
    _tile.getChildren().clear();
    _tile.setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            if (event.isPrimaryButtonDown() /*&& event.getClickCount() == 2*/) {
                _mainApp.showDownloadDialog(dt, _upload);
            }
        }
    });

    if (_upload.getPack() != null) {
        Label pack = new Label();
        pack.setText(_upload.getPack());
        pack.getStyleClass().add("pack-link");
        pack.setCursor(Cursor.HAND);
        pack.relocate(10, 48);

        _tile.getChildren().add(pack);

        pack.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                if (event.isPrimaryButtonDown()) {
                    _mainApp.showPackPage(_upload);
                }
            }
        });
    }
}

最佳答案

您的标签将首先收到mouseclick(因为它位于顶部),因此在处理完点击之后,您可以使用“ consume”阻止它沿链向下传递:

pane.setOnMouseClicked(
        (Event event) -> {

    // process your click here

    System.out.println("Panel clicked");
    pane.requestFocus();
    event.consume();
};

10-06 06:53