【问题标题】:Why getBoundsInLocal gets wrong coordinates?为什么 getBoundsInLocal 得到错误的坐标?
【发布时间】:2017-12-21 14:00:19
【问题描述】:

代码是用 JavaFX 编写的。

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

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

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

但是消息没有显示在新面板的位置。

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

【问题讨论】:

  • Node 是抽象的,所以Node selectPanel = new Node(); 不会编译,所以你必须实现你自己的Node 类。 lambda 表达式也是错误的,因为它没有参数。请仅发布可编译的代码。

标签: java javafx


【解决方案1】:

您的代码未编译(请参阅我的评论),但问题在于即使调用 vbox.getChildren().add(selectPanel);,布局计算也不会(肯定)发生。

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

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

【讨论】:

  • 还有一个问题。我发现坐标并不精确地位于新面板的位置。如果我同时在 vbox 中添加 2 个或更多面板,则每个消息框中都有一些偏移量。当我同时添加多个面板(例如超过 10 个)时,消息框将重叠。索引越大,偏移量越大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多