Я использую Scene Builder (v11.0.0) для создания файлов FXML для сцен в JavaFX (v12), но, несмотря на указание всех контейнеров на USE_COMPUTED_SIZE
для предпочтительной ширины и высоты, отрисовываемых сцен (как видно в SceneBuilder, а также при запуске в качестве приложения JavaFX, которое загружает эти файлы FXML), обрезаются по правому и нижнему краям, так что биты узлов обрезаются.
А в Scene Builder кажется, что средство визуализации должно знатьчто сцена не будет соответствовать разрешенным границам, потому что редактор показывает синие маркеры границ, которые явно находятся за пределами отрисованного прямоугольника.
Просмотр в Scene Builder
Представление в Scene Builder показывает, что в нижней части требуется больше места, чтобы обеспечить кнопкам достаточно места (их нижний край и нижний край TitledPane
отсутствуют).И больше места необходимо справа, чтобы соответствовать правым краям DatePicker
и TitledPane
.Синие маркеры границ четко показывают, где заканчивается фактический контент, поэтому неясно, почему область отображения рассчитывается на несколько пикселей короче этого.
Вид запущенного приложения Java
Как только файлы FXML используются для заполнения окна в приложении JavaFX, видно то же самое: вычисленный размер для окна равен числу пикселей, слишком маленькому, чтобы соответствоватьвся сцена правильно.
Если синие граничные маркеры были правильно рассчитаны, чтобы показать, что необходимы дополнительная ширина и высота области отображения, как я скажу FXML требовать это дополнительное пространство при рендеринге?
Это известная ошибка / ограничение в Scene Builder, FXML или JavaFX.Или мне нужно сделать что-то еще, кроме выбора USE_COMPUTED_SIZE
для предпочтительных размеров?
Чтобы сделать это явным, см. Пример FXML ниже, который отображает проиллюстрированную проблему.
scene.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>
subscene.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>