【发布时间】:2014-01-14 10:14:59
【问题描述】:
我刚开始使用 JavaFX,如果这是一个愚蠢的错误,请原谅。
我有一个GridPane,我想用它让两个相邻的按钮延伸到整个窗口的宽度。所以我创建了一个GridPane,其中包含一行和两个列,并添加到我的两个按钮中。
代码:
<GridPane id="GridPane" alignment="TOP_LEFT" disable="false" gridLinesVisible="false" hgap="5.0">
<children>
<Button mnemonicParsing="false" styleClass="add-button" text="Save" GridPane.columnIndex="0" GridPane.rowIndex="0" />
<Button mnemonicParsing="false" text="Discard" GridPane.columnIndex="1" GridPane.rowIndex="0" />
</children>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>
但现在 Button 只占用了它们必要的空间。所以我给他们两个都加了prefWidth="Infinity"。这会导致 Secene Builder 1.1 立即冻结。我听说场景构建器曾经并且可能存在错误,因此我将其手动编码到 FXML 中并尝试运行该程序。程序启动但不打开窗口。
使用jvisualvm 检查正在运行的进程告诉我JavaFX 应用程序线程正在分配大量空间(数百万ArrayLists 会立即被垃圾收集)。它分配大约 1.2 GB/s。相反,当我尝试用它打开文件时,Scene Builder 似乎什么都不做,因为它使用的堆相当稳定,大约为 16MB(它也不会打开窗口)。
即使prefWidth 仅添加到一个Button 上,也会发生错误。例如,如果我在两个按钮上都使用prefWidth="100000000",我会得到想要的结果,但我觉得这是非常糟糕的编码。
所以我的问题是:
- 这是 JavaFX 的错误吗?
- 如何以更好的方式获得我想要的结果?
【问题讨论】: