将第二个项目添加到我的堆栈窗格时,第一个项目将丢失其Event / MouseOn。 为什么? 我该怎么办? JavaFX的

我有一个堆叠的窗格。 当我向堆栈窗格添加第二个项目时,两个都显示,但我不能再点击我的第一个项目了。 它变得“无法点击”。

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

有没有解决这个问题? 这是我的程序的样子:

我希望我的’网格’始终居中。 左侧有一些按钮位于列的中间,稍后会有右侧的按钮,网格顶部会有按钮/文本,稍后会在边距中显示按钮/文本。

我希望一切都可以点击。

http://img688.imageshack.us/img688/6025/examplerg.png

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(); } 

你可以使任何Pane“鼠标透明”,这样它就不会消耗任何点击事件,并让它们传递到它下面的堆栈。

下面是一些示例代码…此示例在堆栈中设置4个窗格,只有mainPane接受点击开始。

 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); 

现在,当您想要使用canvas在顶部绘制时,请确保将鼠标透明度更改为仅为该堆栈的false,并将所有窗格保持在鼠标透明的顶部。

 fullScreenOverlayCanvas.setMouseTransparent(false); debugOverlay.setMouseTransparent(true); fullScreenOverlayCanvas.setVisible(true); doSomethingWithCanvasThatNeedsMouseClicks(); 

PS我对我的代码进行了一些编辑,因此可能无法按原样运行。 此外,请参阅有关在此处仅使窗格部分透明的讨论: JavaFX将MouseEvents通过透明节点传递给子级