一直在尝试和搜索,但找不到任何解决方案,所以我最终决定放弃并进一步询问......
创建 javafx 应用程序,我在 TilePane 中加载图 block 。
这些图 block 可点击并进入其各自内容的详细信息页面。
在每个图 block 上,如果它们确实属于某个包,我会显示包名称,该名称也是可单击的,并会导致显示该特定包内容的页面。
这意味着容器、图 block (即 Pane )是可单击的,并且在其顶部我有一个也可单击的标签。发生的情况是,当我单击标签时,它还会触发 Pane onMousePressed()...这是图 block 创建代码的一部分,该部分重点关注 onMousePressed()。我尝试通过双击使 Pane 使用react,通过单击使标签使用react,它可以工作,但我想通过单击打开 Pane 。
如果您有任何解决此问题的想法,我将非常感激。
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);
}
}
});
}
}
最佳答案
您的标签将首先收到鼠标点击(因为它位于顶部),因此在处理完点击后,您可以使用“consume”阻止它沿着链向下传递:
pane.setOnMouseClicked(
(Event event) -> {
// process your click here
System.out.println("Panel clicked");
pane.requestFocus();
event.consume();
};
关于java - 在 javafx 中使用 OnMousePressed 将两个 obj 放在彼此之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755057/