JavaFX固定按钮大小,具有动态文本长度

时间:2014-11-25 18:25:55

标签: button javafx

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

我有5个按钮,5个随机数介于1到20之间。单个数字的按钮小于带有两个数字的按钮。我想要两个相同的尺寸。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

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

fixed width buttons

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);
    }
}