为什么getBoundsInLocal坐标错误?

问题描述 投票:1回答:1

代码是用JavaFX编写的。

我有一个根面板,上面有一个VBoxVBox有很多小面板。

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

button.setOnAction(() -> {
    Node selectPanel = new Node();
    vbox.getChildren().add(selectPanel);
    Bounds bounds = selectPanel.localToScreen(selectPanel.getBoundsInLocal());
    showMessage(bounds);
});

但该消息未显示在新面板的位置。

我调试代码并找到边界是根面板(或vbox)的左上角。有人可以告诉我如何获得新面板的正确坐标?

java javafx
1个回答
2
投票

你的代码没有编译(参见我的评论),但问题来自这样一个事实:即使调用vbox.getChildren().add(selectPanel);,布局计算也不会(肯定)发生。

您可以通过在提到的行之后执行以下两个语句来强制它:

vbox.layout();
vbox.applyCss();
© www.soinside.com 2019 - 2024. All rights reserved.