java - 为什么 getBoundsInLocal 得到错误的坐标?

标签 java javafx

代码是用 JavaFX 编写的。

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

我想单击一个按钮将一个小面板添加到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();

关于java - 为什么 getBoundsInLocal 得到错误的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907144/

相关文章:

JavaFX - 更改 FlowPane 中子项的顺序

java - webView 中的触摸事件 - JavaFX

android - 在 Gluon JavaFXPorts 项目中使用 Android aar 库

Java JLayeredPane 覆盖光标

从 URL 线程解析 JavaFX JSON 卡住 UI

java - 如何在线程和 GUI 之间进行通信

java - 将 char 转换为字符串,然后将其插入 JLabel

java - 如何将 Hazelcast 与 Hbase 连接?

用于比较泛型类实例的 Java Comparator

java - 了解Java异常处理: Simple Try Catch blocks