【发布时间】:2018-10-16 23:29:48
【问题描述】:
我正在尝试制作 Java 数独游戏。我无法对齐我的数独输入矩形。由于输入板底部的按钮,它们被移开。如何在我的Main.java 中对齐像我的expected.jpg 这样的矩形。我只想通过Main.java 文件制作我的Buttons 和Input Rectangles。如果无法通过Main.java 进行对齐,请告诉我。谢谢
expected.jpg:
what_i_get.jpg:
Main.java:
package application;
import java.util.*;
import javafx.scene.shape.Rectangle;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.stage.Stage;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
public class Main extends Application {
int[][] original_map;
StackPane[][] screen_buttons = new StackPane[10][10];
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,600,700);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
GridPane root = new GridPane();
root.setPadding(new Insets(10));
root.setHgap(10);
root.setVgap(10);
Scene scene = new Scene(root, 700, 700);
primaryStage.setScene(scene);
// USING SUDOKU.java to build the Sudoku Game
Sudoku map = new Sudoku();
// STORING the sudoku game in the 2x2 array
this.original_map = map.make_game();
for (int y=0;y<9;y++) {
for (int x=0;x<9;x++) {
screen_buttons[y][x] = new StackPane();
Rectangle rec = new Rectangle(30,30);
rec.setFill(javafx.scene.paint.Color.WHITE);
rec.setStyle("-fx-arc-height: 10; -fx-arc-width: 10;");
Label label = new Label(Integer.toString(this.original_map[y][x]));
screen_buttons[y][x].getChildren().addAll(rec, label);
root.add(screen_buttons[y][x], x, y);
}
}
Button[] function_buttons = new Button[4];
String[] function_id = {"Hint", "Clear", "Pause", "Check"};
int pos = 0;
for (Button b : function_buttons) {
if (function_id[pos] == "Hint") {
b = new Button(function_id[pos]);
root.add(b, 1, pos+10);
} else if (function_id[pos] == "Clear"){
b = new Button(function_id[pos]);
root.add(b, 1, pos+10);
} else if (function_id[pos] == "Pause"){
b = new Button(function_id[pos]);
root.add(b, 1, pos+10);
} else {
b = new Button(function_id[pos]);
root.add(b, 6, 11);
}
b.setStyle("-fx-pref-width: 100px; -fx-pref-height: 50px;");
pos++;
}
Button[] click_buttons = new Button[9];
pos = 1;
for (int y=10;y<=12;y++) {
for (int x=2;x<=4;x++) {
click_buttons[pos-1] = new Button(Integer.toString(pos));
root.add(click_buttons[pos-1], x, y);
click_buttons[pos-1].setStyle("-fx-pref-width: 50px; -fx-pref-height: 50px;");
pos++;
}
}
}
public static void main(String[] args) {
launch(args);
}
}
【问题讨论】:
-
首先,只有 9 x 9 的网格,为什么
screen_buttons是一个 10 x 10 的数组? -
@Jai 是我的错。假设写 9x9
-
我在您的代码中没有看到任何
ColumnConstraints或RowConstraints。没有它们,GridPane将根据可用空间自动调整列和行的大小。 -
另外,如果您发布一个minimal reproducible example 将非常有帮助,以便我们编译、测试和改进代码。
-
@Zephyr 如何在
Main.java中添加ColumnConstraints或RowConstraints?