[英]JavaFX button padding changes button size
注意:JavaFX新手
一些文件
Buttton.setPadding
所以,每個人都知道填充是什么,但這里是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的子節點的間距,在本例中為兩個按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.