JavaFX - BorderPane, гарантирующий, что Right Pane всегда получает минимальную ширину - PullRequest
1 голос
/ 03 июля 2019

У меня есть следующая структура JavaFX FXML:

<BorderPane fx:id="mainWindow" prefHeight="500.0" prefWidth="800.0" styleClass="mainFxmlClass" xmlns:fx="http://javafx.com/fxml/1">

    <stylesheets>
        <URL value="@mainwindow.css"/>
    </stylesheets>

    <top>
        <fx:include fx:id="buttonPanel" source="/com/example/app/chart/buttons/buttonPanel.fxml" />
    </top>
    <center>
        <BorderPane fx:id="chartContainer">
            <center>
                <fx:include fx:id="chartPanel" source="/com/example/app/chart/chartpanel/chartPanel.fxml" />
            </center>
            <right>
                <fx:include fx:id="rightAxisPanel" source="/com/example/app/chart/rightaxis/rightAxisPanel.fxml" />
            </right>
        </BorderPane>
    </center>

</BorderPane>

Быть chartPanel и rightAxisPanel:

<AnchorPane fx:id="chartPanel" styleClass="chartPanelClass" xmlns:fx="http://javafx.com/fxml/1">
    <stylesheets>
        <URL value="@chartpanel.css"/>
    </stylesheets>
</AnchorPane>

и

<AnchorPane fx:id="rightAxisPanel" prefWidth="100.0" minWidth="100.0" styleClass="rightAxisPanelClass" xmlns:fx="http://javafx.com/fxml/1">
    <stylesheets>
        <URL value="@rightaxispanel.css"/>
    </stylesheets>
</AnchorPane>

Это генерируетНа следующем рисунке:

image1

Пока все хорошо.

Но если я уменьшу размер окна, то на правой панелиэто тот, который усечен - посмотрите, как усечена желтая область, соответствующая rigthAxisPanel.

Как сделать так, чтобы центральная панель была усеченной?

enter image description here

1 Ответ

2 голосов
/ 03 июля 2019

Минимальная ширина центра AnchorPane предотвращает его сжатие.Установите значение 0, чтобы убедиться, что оно может уменьшаться.

Кроме того, вы должны применить clip к AnchorPane, чтобы его содержимое не показывалось справа от его правой границы.Это может произойти, если вы используете (наполовину) прозрачный фон справа, измените viewOrder или поместите правый узел во внешний BorderPane.

<AnchorPane fx:id="chartPanel" styleClass="chartPanelClass" xmlns:fx="http://javafx.com/fxml/1" minWidth="0">
    <stylesheets>
        <URL value="@chartpanel.css"/>
    </stylesheets>
    <clip>
        <Rectangle width="${chartPanel.width}" height="${chartPanel.height}"/>
    </clip>
</AnchorPane>
...