java 如何消除GridPane中因节点大小不同而导致的节点间间隙?

cld4siwp  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(240)

我想做一个带有清除和开始按钮的数字键盘,但是因为清除和开始按钮比数字按钮宽,所以前两列之间有一个间隙。这里有一张图片:
前两列之间有间隙的数字键盘:

我试过寻找答案,但我没有找到这样的东西。很难向搜索引擎解释。
我期望0按钮与numpad的中间对齐(它确实如此),清除和开始按钮在两侧伸出。但它将清晰按钮与7按钮对齐,造成差距。下面是一个可重复的示例:

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class ReproducibleGap extends Application {
    @Override
    public void start(Stage primaryStage) {
        Scene scene = new Scene(new ButtonGrid());
        
        primaryStage.setTitle("Numpad");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

class ButtonGrid extends GridPane {

    protected Button[] numpad = new Button[10];
    protected Button clear;
    protected Button start;

    ButtonGrid() {
        Font buttonFont = new Font(18);
        for (int i = 0; i < numpad.length; i++) {
            numpad[i] = new Button(String.valueOf(i));
            numpad[i].setFont(buttonFont);
        }

        setAlignment(Pos.CENTER);
        setPadding(new Insets(50, 0, 0, 0));

        for (int i = 0; i < 3; i++) {
            addRow(i, numpad[i * 3 + 1], numpad[i * 3 + 2], numpad[i * 3 + 3]);
        }

        clear = new Button("Clear");
        clear.setFont(buttonFont);

        start = new Button("Start");
        start.setFont(buttonFont);

        addRow(3, clear, numpad[0], start);
    }
}
mkh04yzy

mkh04yzy1#

“clear和start按钮在两侧伸出”--如果我理解正确的话,那么您只需要配置第一列中的节点,使其在有空空间时向右对齐。可以通过ColumnConstraints对整个列执行此操作,也可以通过GridPane#setHalignment(Node,HPos)-Slaw对单个节点执行此操作
非常感谢!我补充道:

ColumnConstraints column0 = new ColumnConstraints();
column0.setHalignment(HPos.RIGHT);
getColumnConstraints().add(column0);

现在它看起来像这样:

这正是我想要的

相关问题