簡體   English   中英

JavaFX按鈕填充可更改按鈕大小

[英]JavaFX button padding changes button size

注意:JavaFX新手

一些文件

Buttton.setPadding 

doc頁面

所以,每個人都知道填充是什么,但這里是Android澄清一個例子。

問題:

設置(並更改) javafx按鈕上的填充會增加按鈕的大小,但不會增加按鈕與其(相鄰)鄰居之間的“空格”。

更多信息:

我想在“退出”和“重置”按鈕之間留一個空格。

假設:

Button btnExit = new Button("Exit");

填充通常只需設置以下內容即可:

btnExit.setPadding(new Insets(10))   //10 px "buffer" around button

要么

btnExit.setPadding(new Insets(0, 10, 0, 0))   //10 px "buffer" on right only

我將對此進行全面填充,但是與其創建此緩沖區,不如擴大緩沖區的大小。

沒有填充( btnExit.setPadding(new Insets(0));

在此處輸入圖片說明

PADDING_LARGE=10

帶填充( btnReset.setPadding(new Insets(PADDING_LARGE));

在此處輸入圖片說明

碼:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Border;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.scene.control.Button;

public class SOS extends Application{

    private int GRID_SIZE = 5;
    private int PADDING_MEDIUM = 5;
    private int PADDING_LARGE = 10;
    private int PADDING_XLARGE = 20;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        //create display boxes
        VBox vbRoot = new VBox(),
                vbGrid = new VBox(),
                vbFooter = new VBox(),
                vbPlayers = new VBox(),
                vbGridInfo = new VBox(),
                vbHeader = new VBox();
        HBox hbOptions = new HBox(),
                hbDone = new HBox(),
                hbGameDetails = new HBox(),
                hbGameTitle = new HBox();

        //=====================HEADER=================================
        Label title = new Label("SOS Game");
        title.setFont(new Font(16));
        hbGameTitle.getChildren().add(title);
        hbGameTitle.setAlignment(Pos.CENTER);

        Label player1 = new Label("Player 1 = ");
        Label player2 = new Label("Player 2 = ");
        vbPlayers.getChildren().addAll(player1,player2);
        vbPlayers.setAlignment(Pos.CENTER);

        Label lblGridPosOpen = new Label("Places Open = ");
        vbGridInfo.getChildren().add(lblGridPosOpen);
        vbGridInfo.setAlignment(Pos.CENTER);

        //add player and grid info boxes to game details box
        hbGameDetails.getChildren().addAll(vbGridInfo, vbPlayers);

        //add game title and game info boxes to header
        vbHeader.getChildren().addAll(hbGameTitle, hbGameDetails);


        //=====================GRID====================================
        GridPane grid = getGrid(GRID_SIZE);

        //add grid object to grid pane
        vbGrid.getChildren().addAll(grid);
        vbGrid.setPadding(new Insets(PADDING_XLARGE));
        vbGrid.setAlignment(Pos.CENTER);

        //======================FOOTER================================
        //set DONE button with padding and callback
        Button btnDone = new Button("DONE");

        btnDone.setMinWidth(130);
        btnDone.setMinHeight(50);
        btnDone.setOnAction(event -> checkSOS());
        btnDone.setPadding(new Insets(PADDING_MEDIUM));

        //add button done to box
        hbDone.getChildren().add(btnDone);
        hbDone.setPadding(new Insets(PADDING_MEDIUM));
        hbDone.setAlignment(Pos.CENTER);

        //set Exit and Reset buttons with padding and callbacks
        Button btnExit = new Button("Exit");
        Button btnReset = new Button("Reset");

        btnExit.setMinWidth(60);
        btnExit.setMinHeight(25);
        btnExit.setPadding(new Insets(PADDING_LARGE));
        btnExit.setOnAction(event -> System.exit(0));

        btnReset.setMinWidth(60);
        btnReset.setMinHeight(25);
        btnReset.setPadding(new Insets(PADDING_LARGE));
        btnReset.setOnAction(event -> reset());

        //add exit and reset buttons to options box
        hbOptions.getChildren().addAll(btnExit, btnReset);
        hbOptions.setPadding(new Insets(PADDING_MEDIUM));
        hbOptions.setAlignment(Pos.CENTER);

        //add done and options boxes to footer
        vbFooter.getChildren().addAll(hbDone, hbOptions);

        //=====================COMBINE ALL======================

        //combine all sections with padding
        vbRoot.getChildren().addAll(vbHeader, vbGrid, vbFooter);
        hbOptions.setPadding(new Insets(PADDING_MEDIUM));

        //=====================SET STAGE===========================
        primaryStage.setTitle("SOS by :)");
        primaryStage.setScene(new Scene(vbRoot));
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    /**
     * Returns a new grid with buttons
     * @param size  Size of grid
     * @return  new grid
     */
    private GridPane getGrid(int size) {
        GridPane grid = new GridPane();
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                grid.add(getSOSButton(), i, j);
            }
        }
        return grid;
    }

    /**
     * Returns a button with callback to change text
     * @return
     */
    private Button getSOSButton(){
        //create button
        Button b = new Button();
        b.setMinHeight(50);
        b.setMaxHeight(50);
        b.setMinWidth(50);
        b.setMaxWidth(50);

        //set callback
        b.setOnAction(event -> b.setText((b.getText().equals("O") || b.getText().isEmpty()) ? "S" : "O"));
        return b;
    }

    private void reset(){

    }

    private void checkSOS(){

    }
}

JavaFX中的填充應該會增加按鈕的大小,但不會影響按鈕外部的區域。 填充指的是按鈕內部的區域,但指的是文本周圍的區域,因此,指的是文本的“填充”。 如果要在按鈕外部填充,則必須在構造函數中更改包含節點(在本例中為hbOptions),如下所示:

HBox hbOptions = new HBox(numberValueInPointsByWhichYouWantToSeparateYourButtons);

或致電

hbOptions.setSpacing(numberValueInPointsByWhichYouWantToSeparateYourButtons);

此setSpacing(double interval)方法是指HBox的子節點的間距,在本例中為兩個按鈕。

(此答案的幫助來自在VBoxHBox文檔中的 按鈕之間添加空格 )。

暫無
暫無

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

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