问题描述
<borderpane>
...
<right>
<GridPane>
...
</GridPane>
</right>
...
</borderpane>
显然,现在 GridPane 在我的 borderpane 右侧占据了很大的空间。我想要做的是添加一个按钮(或其他元素)来最小化和最大化 GridPane,因此它只有在真正需要时才完全在用户的视野中。我怎样才能轻松实现这一目标?
解决方法
您可以通过关闭和打开 GridPane 的 Visible 和 Managed 属性来执行您想要的操作。 BorderPane 的中心将自动扩展以占据 BorderPane 的整个宽度。 “Managed”控制布局管理器是否会为节点留出空间,因此如果您只是关闭 Visible,那么您将在右侧拥有一个与 GridPane 大小相同的未使用区域。下面的代码演示了它,我把按钮放在一个 VBox 中,周围有边框,这样你就可以看到它是如何展开的:
public class ResizeRight extends BorderPane {
public ResizeRight() {
Button openButton = new Button("Open");
Button closeButton = new Button("Close");
GridPane gridPane = new GridPane();
gridPane.addRow(0,new Text("This is just some text"));
gridPane.addRow(1,new Text("This is just some more text"));
VBox vbox = new VBox(10,openButton,closeButton);
vbox.setBorder(new Border(new BorderStroke(Color.BLACK,BorderStrokeStyle.SOLID,CornerRadii.EMPTY,BorderWidths.DEFAULT)));
setCenter(vbox);
setRight(gridPane);
setPadding(new Insets(10));
openButton.setOnAction(evt -> {
gridPane.setVisible(true);
gridPane.setManaged(true);
});
closeButton.setOnAction(evt -> {
gridPane.setVisible(false);
gridPane.setManaged(false);
});
}
}
从以下内容运行它:
public class Sample1 extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Scene scene = new Scene(new ResizeRight(),300,200);
primaryStage.setScene(scene);
primaryStage.show();
}
}