当前位置: 首页 > 知识库问答 >
问题:

获取堆栈窗格的宽度

齐元章
2023-03-14

我不知道如何获得堆栈窗格的宽度:

如果我指的是 http://docs.oracle.com/javafx/2.0/api/javafx/scene/layout/StackPane.html,堆栈窗格的尺寸应该适应它的内容:

堆栈窗格的父级将在布局期间在堆栈窗格的可调整大小范围内调整堆栈窗格的大小。默认情况下,堆栈窗格根据其内容计算此范围,如下表所述。

首选宽度左/右插入加上最大的子首选宽度。

这里的语法是scala,但问题涉及javafx:

import javafx.scene.layout.StackPane
import javafx.scene.shape.Rectangle

class Bubble() extends StackPane {
val rect = new Rectangle(100, 100)

getChildren.add(rect)

println(rect.getWidth)
println(this.getWidth)
}

Output :
>> 100.0
>> 0.0 <- Why isn't it 100 ?

这是一个错误还是等待的行为?如何获取堆栈窗格的内容宽度?

Thanx公司

共有1个答案

左丘嘉木
2023-03-14

布局管理器(以及实际上所有可调整大小的对象)在实际显示应用程序之前不会更新其边界。矩形的宽度为 100,因为它是构造函数的默认值。

请参阅下一个代码:

@Override
public void start(Stage stage) throws Exception {
    StackPane root = new StackPane();
    Rectangle rect = new Rectangle(100, 100);
    root.getChildren().add(rect);

    // 100 - 0
    System.out.println(rect.getWidth());
    System.out.println(root.getWidth());

    stage.setScene(new Scene(root));

    // 100 - 0
    System.out.println(rect.getWidth());
    System.out.println(root.getWidth());

    stage.show();

    // 100 - 100
    System.out.println(rect.getWidth());
    System.out.println(root.getWidth());
}

因此,您需要等待StackPane显示。或者更好地依赖JavaFX并使用绑定。例如。

    stage.titleProperty().bind(root.widthProperty().asString());
 类似资料:
  • 在我们的日志文件中,我们发现以下内容: 只有这一行,没有异常堆栈跟踪。 出现此异常的try块正在执行使用javassist创建的动态生成的Java字节码。 我想知道两件事: : null 丢失的堆栈跟踪,尽管在块内使用调用日志挂钩,这通常会导致完整的堆栈跟踪被打印在日志文件中。 我的问题: > 什么样的代码会导致日志输出“java.lang.ArrayIndexOutOfBoundsExcepti

  • 我想使用FXML在JavaFX中创建一个包含3列的GridPane。中柱上有一个大标签。中间列采用标签的宽度。左栏和右栏各占表单剩余宽度的一半(50%)。我尝试将百分之五十的宽度设置为左栏和右栏。但是,宽度设置为整个形状的50%,而不是剩余宽度。例如,表单的宽度为1000px。中柱可能需要400px,而左柱和右柱各自需要300px。即使窗体在运行时调整大小,此公式也应保持不变。

  • 好了,我理解了调整窗格中对象大小的绑定原则,这个问题有点不同。我很困惑,我试图创建一个扩展Pane的类,在我的main中创建一条线,将它的startX和startY坐标绑定到窗格的中心。问题是,当使用getWidth() / 2或getHeight() /2时,当我按下箭头键时,坐标被放置在起始坐标(0,0)的左上某处,当按下箭头键时,它会创建另一条线,该线在按下的给定方向上绘制,并从最后一条线的

  • 问题内容: 如何获得Java中的当前堆栈跟踪,就像你可以在.NET中那样? 我找到了,但这不是我想要的-我想找回堆栈跟踪信息,而不是打印出来。 问题答案: 你可以使用。 这将返回一个数组,该数组代表程序的当前堆栈跟踪。

  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 问题内容: 最近,我问是否要报告捕获到的异常的文本。出乎意料的是,大多数答案都误解了我的问题,并以为我在问是否要报告堆栈跟踪以获取捕获的异常,这表明这样做是正常的。所以我要问一个后续问题。 在例外情况下,应该或不应该在什么情况下报告堆栈跟踪?通过“报告”,我包括要求一个日志记录框架为您记录堆栈跟踪 我不问是否报告 的东西 。我在问那个报告是否应该包括堆栈跟踪。 问题答案: 它取决于上下文。例如,当