gpt4 book ai didi

java - 如何设置多个按钮并将它们添加到 gridPane

转载 作者:行者123 更新时间:2023-11-30 10:43:30 25 4
gpt4 key购买 nike

对于 GUI,我必须将多个按钮设置为 GridPane。为此,我想问一下是否有一种方法可以比我更优雅地在网格中添加多个按钮。这是我的代码的摘录。

Button button0 =new Button("0");
Button button1 =new Button("1");
Button button2 =new Button("2");
Button button3 =new Button("3");
Button button4 =new Button("4");
Button button5 =new Button("5");
Button button6 =new Button("6");
Button button7 =new Button("7");
Button button8 =new Button("8");
Button button9 =new Button("9");
Button cancel = new Button("C");
Button plus = new Button("+");
Button minus = new Button("-");
Button multiplicate = new Button("*");
Button divide = new Button("/");
Button equal = new Button("=");

对于所有这些按钮,我必须分别设置行和列索引。

root.setPadding(new Insets(5,5,5,5));
GridPane.setConstraints(root, 4, 3);
root.getChildren();
root.add(label, 1, 1, 3, 1);
root.add(button1, 2, 2);
root.add(button2, 3, 2);
root.add(button3, 4, 2);
root.add(button4, 2, 3);
root.add(button5, 3, 3);
root.add(button6, 4, 3);
root.add(button7, 2, 4);
root.add(button8, 3, 4);
root.add(button9, 4, 4);
root.add(button0, 2, 5);
root.add(cancel, 3, 5);
root.add(plus, 5,2);
root.add(minus, 5,3);
root.add(multiplicate, 5, 4);
root.add(divide, 5,5);
root.add(equal, 4, 5);

如有任何建议,我将不胜感激。

最佳答案

您也应该按照评论中的建议使用 FXML 文件。

但是如果您想坚持使用 Java 代码,您可以这样做(我的建议仍然是使用 FXML 文件):

Main.java

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
GridPane root = new GridPane();
Scene scene = new Scene(root, 400, 400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

Button b = new Button();
b.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
}
});

GridHelper.addToGrid(root, new Button("0"), 2, 5);
GridHelper.addToGrid(root, new Button("1"), 2, 2);
GridHelper.addToGrid(root, new Button("2"), 3, 2);
GridHelper.addToGrid(root, new Button("3"), 4, 2);
GridHelper.addToGrid(root, new Button("4"), 2, 3);
GridHelper.addToGrid(root, new Button("5"), 3, 3);
GridHelper.addToGrid(root, new Button("6"), 4, 3);
GridHelper.addToGrid(root, new Button("7"), 2, 4);
GridHelper.addToGrid(root, new Button("8"), 3, 4);
GridHelper.addToGrid(root, new Button("9"), 4, 4);

GridHelper.addToGrid(root, new Button("C"), 3, 5, e -> System.out.println("C"));
GridHelper.addToGrid(root, new Button("+"), 5, 2, e -> System.out.println("+"));
GridHelper.addToGrid(root, new Button("-"), 5, 3);
GridHelper.addToGrid(root, new Button("*"), 5, 4);
GridHelper.addToGrid(root, new Button("/"), 5, 5);
GridHelper.addToGrid(root, new Button("="), 4, 5);

root.setPadding(new Insets(5, 5, 5, 5));

primaryStage.setScene(scene);
primaryStage.show();

} catch (Exception e) {
e.printStackTrace();
}
}

static class GridHelper {

static void addToGrid(GridPane grid, Node c, int col, int r) {
grid.add(c, col, r);
}

static void addToGrid(GridPane grid, Node c, int col, int r, EventHandler<ActionEvent> event) {
grid.add(c, col, r);
addButtonEvent(c, event);
}

static void addToGrid(GridPane grid, Node c, int col, int r, int cs, int rs) {
grid.add(c, col, r, cs, rs);
}

static void addToGrid(GridPane grid, Node c, int col, int r, int cs, int rs, EventHandler<ActionEvent> event) {
grid.add(c, col, r, cs, rs);
addButtonEvent(c, event);
}

static void addButtonEvent(Node button, EventHandler<ActionEvent> event) {
if (button instanceof Button)
((Button) button).setOnAction(event);
}

}

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

它只是简单地引入了一个静态类,该类暴露了一些静态方法来将Node添加到GridPane的指定位置,并可选地设置跨度(行/列).如果它是一个 Button,您还可以添加一个按下事件。当然可以进一步概括,它只是确切问题的示例。

您还可以为 Button 的 0 - 9 创建一个循环(如评论中所提议的那样)。

关于java - 如何设置多个按钮并将它们添加到 gridPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com