Как сделать так, чтобы правый узел в пограничной панели занимал всю правую сторону - PullRequest
1 голос
/ 24 марта 2019

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

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <bottom>
      <AnchorPane minWidth="200.0" prefHeight="45.0" prefWidth="600.0" BorderPane.alignment="CENTER" />
   </bottom>
   <right>
      <AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </right>
</BorderPane>

1 Ответ

0 голосов
/ 24 марта 2019

Прежде всего, я бы предложил использовать обычный Pane вместо AnchorPane.

Затем вы можете вставить это в свой код внутри start метода.

    stage.widthProperty().addListener(event -> {
        rightPane.setPrefWidth(stage.getWidth()/2);
        rightPane.relocate(stage.getWidth()/2,0);
    });

    stage.heightProperty().addListener(event -> {
        rightPane.setPrefHeight(stage.getHeight());
    });

    root.getChildren().add(pane);

Это создает панель, занимающую половину сцены, или окно с правой стороны.

Затем в файле fxml в

<bottom>
  <AnchorPane minWidth="200.0" prefHeight="45.0" prefWidth="600.0" BorderPane.alignment="CENTER" />
</bottom>
<right>
  <AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</right>

удалите все элементы, говоря положение и ширину панелей.

А затем, для нижней панели, вы можете добавить к слушателям widthProperty() и heightProperty(), чтобы получить:

    stage.widthProperty().addListener(event -> {
        rightPane.setPrefWidth(stage.getWidth()/2);
        rightPane.relocate(stage.getWidth()/2,0);
        bottomPane.setPrefWidth(stage.getWidth()-rightPane.getPrefWidth());
    });

    stage.heightProperty().addListener(event -> {
        rightPane.setPrefHeight(stage.getHeight());
        bottomPane.setPrefHeight(100); // change 100 to how high you want your bottomPane to be
        //if you want your bottomPane's height to be half the height of the window use this:  bottomPane.setPrefHeight(stage.getHeight()/2);
        bottomPane.relocate(0,stage.getHeight() - bottomPane.getPrefHeight());
        bottomPane.toFront();
    });
...