Java 为什么getBoundsInLocal获取错误的坐标?

Java 为什么getBoundsInLocal获取错误的坐标?,java,javafx,Java,Javafx,代码是用JavaFX编写的 我有一个根面板,上面有一个VBox。在VBox中有许多小面板 我想单击一个按钮将一个小面板添加到VBox,然后在新面板上弹出一个消息对话框 button.setOnAction(() -> { Node selectPanel = new Node(); vbox.getChildren().add(selectPanel); Bounds bounds = selectPanel.localToScreen(selectPanel.ge

代码是用JavaFX编写的

我有一个根面板,上面有一个
VBox
。在
VBox
中有许多小面板

我想单击一个按钮将一个小面板添加到
VBox
,然后在新面板上弹出一个消息对话框

button.setOnAction(() -> {
    Node selectPanel = new Node();
    vbox.getChildren().add(selectPanel);
    Bounds bounds = selectPanel.localToScreen(selectPanel.getBoundsInLocal());
    showMessage(bounds);
});
但该信息不会显示在新面板的位置


我调试代码,发现边界位于根面板(或vbox)的左上角。有人能告诉我如何获得新面板的正确坐标吗?

您的代码没有编译(请参阅我的评论),但问题来自这样一个事实:即使
vbox.getChildren().add(selectPanel))时,布局计算(肯定)不会发生

您可以通过在上述行之后执行以下两条语句来强制执行:

vbox.layout();
vbox.applyCss();

Node
是抽象的,因此
Node selectPanel=new Node()
不会编译,因此必须实现自己的
节点
类。lambda表达式也是错误的,因为它没有参数。请只发布编译的代码。还有一个问题。我发现坐标并不精确地位于新面板的位置。如果同时在vbox中添加2个或更多面板,则每个消息框中都会有一些偏移。当我同时添加多个面板(例如超过10个)时,消息框将重叠。指数越大,偏移量越大。