java - 如何在调整窗口大小时自动调整 BorderPane 上按钮的大小?

标签 java user-interface button javafx borderpane

我的 Java 水平为中级,对 JavaFX 还很陌生。我正在开发一个在 JavaFX 8 中使用 BorderPane 的应用程序。BorderPane 底部有两个按钮。

  1. 我想将按钮放置/对齐 BorderPane 底部的中心,但不知道执行此操作的函数。我正在尝试:

Bpane.setAlignment(bttmBttn, Pos.BOTTOM_CENTER)

但没有成功。我希望他们始终成为中心。它看起来像这样:

enter image description here

  • 我希望能够随着窗口大小的调整而自动调整按钮的大小。截至目前,当窗口展开时,按钮之间保持相同的间隙,这使得它看起来像这样:
  • enter image description here

    最佳答案

    要将按钮对齐在 BorderPane 底部的中心,一种简单方便的方法是使用 HBox 作为两个按钮的父容器。

    HBox box = new HBox(10, button1, button2); // 10 is spacing
    box.setAlignment(Pos.CENTER);
    borderPane.setBottom(box);
    

    由于您希望按钮在扩展屏幕时扩展,因此可以将这些按钮的 HGROW 设置为 Priority.ALWAYS

    HBox.setHgrow(button1, Priority.ALWAYS);
    HBox.setHgrow(button2, Priority.ALWAYS);
    

    您还必须通过调用以下命令从按钮中删除 maxSize 约束:

    button1.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
    button2.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
    

    这种方法有一个小问题。这些按钮将捕获整个可用区域,但我们不希望这样。摆脱它的一个简单方法是在 HBox 的开头和结尾添加两个固定长度的透明矩形。


    MCVE

    import javafx.application.Application;
    import javafx.geometry.Pos;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Rectangle;
    import javafx.stage.Stage;
    
    public class Main extends Application {
    
    
        @Override
        public void start(Stage primaryStage) {
    
            Button button1 = new Button("Button 1");
            Button button2 = new Button("Button 2");
    
            button1.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
            button2.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
    
            Rectangle rect1 = new Rectangle(60, 20);
            rect1.setFill(Color.TRANSPARENT);
            Rectangle rect2 = new Rectangle(60, 20);
            rect2.setFill(Color.TRANSPARENT);
    
            HBox box = new HBox(10, rect1, button1, button2, rect2);
            box.setAlignment(Pos.CENTER);
            HBox.setHgrow(button1, Priority.ALWAYS);
            HBox.setHgrow(button2, Priority.ALWAYS);
    
            BorderPane root = new BorderPane();
            root.setBottom(box);
    
            Scene scene = new Scene(root, 300, 250);
    
            primaryStage.setTitle("Main Stage");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    关于java - 如何在调整窗口大小时自动调整 BorderPane 上按钮的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569575/

    相关文章:

    java - 在Intellij 12 Ultimate中配置tomcat7

    java - MySQL DATETIME 到 DATE 查询 JPQL

    Java Eclipse 输出到 csv 文件

    matlab - 停止在 MATLAB GUI 中播放 wav 文件

    linux - 差异感知编辑器,可以处理补丁 block 编辑(包括删除行)?

    user-interface - 如何删除在borderpane上添加的Fragment()?

    html - 如何不验证具有必需属性的 HTML5 文本框

    Javafx TableView 显示问题

    多次点击后触发的 Android Button OnClick 事件

    php - 协调显示/隐藏 JQuery 脚本到 PHP