Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将第二个项目添加到我的stackpane时,第一个项目将丢失其事件/鼠标。为什么?我该怎么修理?JavaFX_Java_Layout_Javafx_Javafx 2_Pane - Fatal编程技术网

将第二个项目添加到我的stackpane时,第一个项目将丢失其事件/鼠标。为什么?我该怎么修理?JavaFX

将第二个项目添加到我的stackpane时,第一个项目将丢失其事件/鼠标。为什么?我该怎么修理?JavaFX,java,layout,javafx,javafx-2,pane,Java,Layout,Javafx,Javafx 2,Pane,我有一个格子窗。当我将第二个项目添加到堆栈窗格时,这两个项目都会显示,但我无法再单击第一个项目。它变得“不可接近” 我在.setonmouse中定义的任何内容都不起作用。它适用于我的第二项。如果我切换它们在堆栈窗格中的顺序,则另一个可以工作,但不能同时工作 有解决办法吗?这就是我的程序的样子: 我希望我的“网格”始终居中。在一列中居中的左侧有按钮,稍后在右侧有按钮,网格顶部有按钮/文本,页边距中也有按钮 我希望一切都可以点击 StackPane按Z顺序订购项目:后者位于前者之上。所以,您的第二个

我有一个格子窗。当我将第二个项目添加到堆栈窗格时,这两个项目都会显示,但我无法再单击第一个项目。它变得“不可接近”

我在.setonmouse中定义的任何内容都不起作用。它适用于我的第二项。如果我切换它们在堆栈窗格中的顺序,则另一个可以工作,但不能同时工作

有解决办法吗?这就是我的程序的样子:

我希望我的“网格”始终居中。在一列中居中的左侧有按钮,稍后在右侧有按钮,网格顶部有按钮/文本,页边距中也有按钮

我希望一切都可以点击


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();
另外,我对我的代码做了一些编辑,所以它可能不会按原样运行。另外,请参见此处关于仅使窗格的一部分透明的讨论: