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