一直在尝试和搜索,但找不到任何解决方案,所以我最终决定放弃并进一步询问...
创建一个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();
};