将第二个项目添加到我的堆栈窗格时,第一个项目将丢失其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通过透明节点传递给子级
- 在匿名类中使用最终变量时的垃圾收集
- 如何在Eclipse Oxygen中设置java 10?
- Java中的function是否类似于C#的匿名类型?
- 为什么我们应该在线程中使用Join?
- javax.el.PropertyNotFoundException:/demo.xhtml @ 24,55 value =“#{UserBean.favYear3}”:目标无法访问,标识符’UserBean’已解析为null
- 设置表达式’spa.amount’时出错,值为'[Ljava.lang.String; @ 10dd65e’)
- 通过jSoup从Div标签获取属性值
- 后退/主页按钮
- 使用Spring的CachingConnectionFactory时关闭会话