将第二个项目添加到我的stackpane时,第一个项目将丢失其事件/鼠标。为什么?我该怎么修理?JavaFX
我有一个格子窗。当我将第二个项目添加到堆栈窗格时,这两个项目都会显示,但我无法再单击第一个项目。它变得“不可接近” 我在.setonmouse中定义的任何内容都不起作用。它适用于我的第二项。如果我切换它们在堆栈窗格中的顺序,则另一个可以工作,但不能同时工作 有解决办法吗?这就是我的程序的样子: 我希望我的“网格”始终居中。在一列中居中的左侧有按钮,稍后在右侧有按钮,网格顶部有按钮/文本,页边距中也有按钮 我希望一切都可以点击将第二个项目添加到我的stackpane时,第一个项目将丢失其事件/鼠标。为什么?我该怎么修理?JavaFX,java,layout,javafx,javafx-2,pane,Java,Layout,Javafx,Javafx 2,Pane,我有一个格子窗。当我将第二个项目添加到堆栈窗格时,这两个项目都会显示,但我无法再单击第一个项目。它变得“不可接近” 我在.setonmouse中定义的任何内容都不起作用。它适用于我的第二项。如果我切换它们在堆栈窗格中的顺序,则另一个可以工作,但不能同时工作 有解决办法吗?这就是我的程序的样子: 我希望我的“网格”始终居中。在一列中居中的左侧有按钮,稍后在右侧有按钮,网格顶部有按钮/文本,页边距中也有按钮 我希望一切都可以点击 StackPane按Z顺序订购项目:后者位于前者之上。所以,您的第二个
StackPane
按Z顺序订购项目:后者位于前者之上。所以,您的第二个项目得到了所有鼠标点击,而第一个项目(被第二个项目覆盖)没有得到任何东西
对于您描述的布局,您可以使用BorderPane:
public void start(Stage stage) throws Exception {
BorderPane root = new BorderPane();
root.setCenter(new Rectangle(100,100, Color.RED));
root.setLeft(new Rectangle(10,10, Color.BLUE));
root.setRight(new Rectangle(10,10, Color.CYAN));
stage.setScene(new Scene(root,300,300));
stage.show();
}
您可以将任何窗格设置为“鼠标透明”,这样它就不会消耗任何单击事件,并允许它们传递到它下面的堆栈
下面是一些示例代码。。。本例在一个堆栈中设置了4个窗格,只有主窗格开始接受单击
StackPane rootPane = new StackPane();
VBox mainPane = new VBox(80);
BorderPane helpOverlayPane = new BorderPane();
helpOverlayPane.setMouseTransparent(true);
Canvas fullScreenOverlayCanvas = new Canvas();
fullScreenOverlayCanvas.setMouseTransparent(true);
VBox debugPane = new VBox();
debugPane.setAlignment(Pos.BASELINE_RIGHT);
AnchorPane debugOverlay = new AnchorPane();
debugOverlay.setMouseTransparent(true);
debugOverlay.getChildren().add(debugPane);
AnchorPane.setBottomAnchor(debugPane, 80.0);
AnchorPane.setRightAnchor(debugPane, 20.0);
rootPane.getChildren().addAll(mainPane, fullScreenOverlayCanvas, debugOverlay, helpOverlayPane);
现在,当您想使用画布在顶部绘制时,请确保将该堆栈的“鼠标透明”更改为false,并使其顶部的所有窗格保持鼠标透明
fullScreenOverlayCanvas.setMouseTransparent(false);
debugOverlay.setMouseTransparent(true);
fullScreenOverlayCanvas.setVisible(true);
doSomethingWithCanvasThatNeedsMouseClicks();
另外,我对我的代码做了一些编辑,所以它可能不会按原样运行。另外,请参见此处关于仅使窗格的一部分透明的讨论: