我正在使用 Scene Builder (v11.0.0) 为 JavaFX (v12) 中的场景创建 FXML 文件,但是,尽管指示所有容器USE_COMPUTED_SIZE
使用首选宽度和高度,但渲染的场景(如 Scene Builder 中所示以及运行时加载这些 FXML 文件的 JavaFX 应用程序)在右边缘和下边缘被剪裁,因此节点位被切掉。
在 Scene Builder 中,渲染器似乎必须知道场景不符合允许的边界,因为编辑器显示的蓝色边界标记明显超出了渲染的矩形。
在场景生成器中查看
Scene Builder 中的视图显示底部需要更多空间,以便为按钮提供足够的空间(它们的底部边缘和底部边缘TitledPane
缺失)。并且右侧需要更多空间以适合 和 的右DatePicker
边缘TitledPane
。蓝色边界标记清楚地显示了实际内容的结束位置,因此不清楚为什么显示区域被计算为比这短几个像素。
正在运行的 Java 应用程序的视图
一旦 FXML 文件用于填充 JavaFX 应用程序中的窗口,就会看到相同的情况:计算出的窗口大小是像素数太少,无法正确适应整个场景。
如果正确计算了蓝色边界标记以显示需要额外的显示区域宽度和高度,我如何告诉 FXML 在渲染时需要这个额外的空间?
这是 Scene Builder、FXML 或 JavaFX 中的已知错误/限制吗?USE_COMPUTED_SIZE
或者除了选择首选尺寸之外,我还需要做些什么吗?
为了明确这一点,请参阅下面的示例 FXML,该示例显示了所示问题。
场景.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<TitledPane animated="false" collapsible="false" text="untitled">
<content>
<HBox>
<children>
<fx:include source="subscene.fxml" />
</children>
</HBox>
</content>
</TitledPane>
<TitledPane animated="false" collapsible="false" text="untitled">
<content>
<HBox>
<children>
<fx:include source="subscene.fxml" />
</children>
</HBox>
</content>
</TitledPane>
<TitledPane animated="false" collapsible="false" text="untitled">
<content>
<HBox alignment="BASELINE_RIGHT">
<children>
<Button mnemonicParsing="false" text="Button" />
<Button mnemonicParsing="false" text="Button" />
</children>
</HBox>
</content>
</TitledPane>
</children>
</VBox>
子场景.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label text="Label" />
<DatePicker />
</children>
</VBox>