Button JavaFX固定按钮大小和文本的动态长度

Button JavaFX固定按钮大小和文本的动态长度,button,javafx,Button,Javafx,我在JavaFX中的按钮大小有问题。我希望有固定大小的按钮,但当我更改按钮上的文本时,也会更改按钮大小 我有5个按钮和5个1-20之间的随机数。一位数的按钮比两位数的按钮小。我想要两个一样大小的 我能做什么?这里有一种方法。按钮放在TilePane中,TilePane放在一个组中,以便其中的所有内容都保持其首选大小。每个按钮上都设置了首选尺寸 import javafx.application.Application; import javafx.geometry.Insets; import

我在JavaFX中的按钮大小有问题。我希望有固定大小的按钮,但当我更改按钮上的文本时,也会更改按钮大小

我有5个按钮和5个1-20之间的随机数。一位数的按钮比两位数的按钮小。我想要两个一样大小的


我能做什么?

这里有一种方法。按钮放在TilePane中,TilePane放在一个组中,以便其中的所有内容都保持其首选大小。每个按钮上都设置了首选尺寸

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;

import java.util.Random;

public class FixedSizes extends Application {

    private static final int NUM_BUTTONS = 5;
    private static final int MAX_BUTTON_VALUE = 20;
    private static final Random random = new Random(42);

    @Override
    public void start(Stage stage) throws Exception {
        stage.setScene(new Scene(generateButtonLayout()));
        stage.show();
    }

    private Parent generateButtonLayout() {
        TilePane layout = new TilePane();
        layout.setHgap(10);
        layout.setPrefColumns(NUM_BUTTONS);
        layout.getChildren().setAll(createButtons());
        layout.setPadding(new Insets(10));

        return new Group(layout);
    }

    private Button[] createButtons() {
        Button[] buttons = new Button[NUM_BUTTONS];
        for (int i = 0; i < buttons.length; i++) {
            buttons[i] = createButton();
        }

        return buttons;
    }

    private Button createButton() {
        Button button = new Button(generateButtonText());
        button.setOnAction(event -> button.setText(generateButtonText()));
        button.setPrefWidth(50);

        return button;
    }

    private String generateButtonText() {
        return "" + (random.nextInt(MAX_BUTTON_VALUE) + 1);
    }

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

导入javafx.application.application;
导入javafx.geometry.Insets;
导入javafx.scene.Group;
导入javafx.scene.Parent;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.layout.TilePane;
导入javafx.stage.stage;
导入java.util.Random;
公共类FixedSizes扩展应用程序{
专用静态最终int NUM_按钮=5;
专用静态最终int最大按钮值=20;
私有静态最终随机=新随机(42);
@凌驾
public void start(Stage)引发异常{
stage.setScene(新场景(generateButtonLayout());
stage.show();
}
私有父级generateButtonLayout(){
TilePane布局=新的TilePane();
布局。setHgap(10);
layout.setPrefColumns(NUM_按钮);
layout.getChildren().setAll(createButtons());
布局。设置填充(新插图(10));
返回新组(布局);
}
私有按钮[]创建按钮(){
按钮[]按钮=新按钮[NUM_按钮];
对于(int i=0;i按钮.setText(generateButtonText());
按钮。设置预宽(50);
返回按钮;
}
私有字符串generateButtonText(){
返回“”+(random.nextInt(最大按钮值)+1);
}
公共静态void main(字符串[]args){
发射(args);
}
}

您可以实现一个包含所有按钮(比如ButtonPane)的容器,并将所有按钮布局到所有按钮中的最大首选宽度。也就是说,ButtonPane覆盖了
layoutChildren()
方法。感谢您的帮助!作为一种特殊情况,如果将按钮放入
VBox
(默认值为
fillWidth=true
)中,它们都将调整到
VBox
的宽度,即相同的宽度。