簡體   English   中英

如何在調整窗口大小時自動調整BorderPane上按鈕的大小?

[英]How to automatically resize buttons on BorderPane as the window is resized?

我是Java的中級專家,對JavaFX還是相當陌生。 我正在開發一個使用JavaFX 8中的BorderPane的應用程序。我在BorderPane的底部有兩個按鈕。

  1. 我想將按鈕放置/對齊在BorderPane底部的中心,但是不知道執行此功能的功能。 我正在嘗試:

Bpane.setAlignment(bttmBttn,位置:BOTTOM_CENTER)

但是沒有用 我一直希望他們成為中心。 看起來像這樣:

在此處輸入圖片說明

  1. 我希望能夠隨着窗口的大小自動調整按鈕的大小。 截至目前,按鈕與窗口展開時在按鈕之間保持相同的間隙,這使它看起來像這樣:

在此處輸入圖片說明

要將按鈕對准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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM