如何使borderpane中的右侧节点占据整个右侧
How to make right node in borderpane take up whole right side
我在 BorderPane 的右侧有一个 AnchorPane,在底部有另一个 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>
首先,我建议使用常规 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);
这使得一个窗格占据了舞台的一半,或者右侧的 window。
然后,在您的 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();
});
我在 BorderPane 的右侧有一个 AnchorPane,在底部有另一个 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>
首先,我建议使用常规 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);
这使得一个窗格占据了舞台的一半,或者右侧的 window。
然后,在您的 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();
});