User interface 将GridPane添加到GridPane
我是JavaFX的初学者,必须为最终项目创建一个交互式数独板。我的计划是在一个3乘3的网格窗格中添加9个3乘3的网格窗格(以制作带有轮廓框的美观的板),但似乎不能像我这样做 下面是我的blankBoard()创建方法的摘录。board和box预定义为全局GridPane变量:User interface 将GridPane添加到GridPane,user-interface,javafx,border,sudoku,gridpane,User Interface,Javafx,Border,Sudoku,Gridpane,我是JavaFX的初学者,必须为最终项目创建一个交互式数独板。我的计划是在一个3乘3的网格窗格中添加9个3乘3的网格窗格(以制作带有轮廓框的美观的板),但似乎不能像我这样做 下面是我的blankBoard()创建方法的摘录。board和box预定义为全局GridPane变量: for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { for (int row1
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
for (int row1 = 0; row1 < 3; row1++) {
for (int col1 = 0; col1 < 3; col1++) {
text = new TextField("0");
box = new GridPane();
GridPane.setConstraints(text, col1, row1);
box.getChildren().addAll(text);
}
}
GridPane.setConstraints(box, col, row);
board.getChildren().addAll(box);
}
}
for(int行=0;行<3;行++){
for(int col=0;col<3;col++){
对于(int row1=0;row1<3;row1++){
for(int col1=0;col1<3;col1++){
text=新文本字段(“0”);
box=新的网格窗格();
setConstraints(text、col1、row1);
box.getChildren().addAll(文本);
}
}
设置约束(框、列、行);
board.getChildren().addAll(box);
}
}
这给了我一个3乘3的网格窗格:
有没有其他方法可以做到这一点,或者只是在9×9网格窗格中的一些列和行之间添加边框 看起来您正在创建
9x9=81
“内部”网格窗格,而此时您应该创建其中的3x3=9
。然后,您只需将每组9个中的最后一个添加到板中。你需要像这样的东西
GridPane board = new GridPane();
for (int blockColumn = 0; blockColumn < 3 ; blockColumn++) {
for (int blockRow = 0; blockRow < 3; blockRow++) {
GridPane box = new GridPane();
box.setStyle("-fx-background-color: black, -fx-control-inner-background; -fx-background-insets: 0, 2; -fx-padding: 2;");
for (int column = 0; column < 3; column++) {
for (int row = 0 ; row < 3; row++) {
TextField textField = new TextField("0");
textField.setStyle("-fx-pref-width: 2em;");
GridPane.setConstraints(textField, column, row);
box.getChildren().add(textField);
}
}
GridPane.setConstraints(box, blockColumn, blockRow);
board.getChildren().add(box);
}
}
GridPane board=new GridPane();
for(int blockColumn=0;blockColumn<3;blockColumn++){
对于(int blockRow=0;blockRow<3;blockRow++){
GridPane box=新建GridPane();
box.setStyle(“-fx背景颜色:黑色,-fx控件内部背景;-fx背景插入:0,2;-fx填充:2;”);
for(int列=0;列<3;列++){
对于(int行=0;行<3;行++){
TextField TextField=新的TextField(“0”);
textField.setStyle(“-fx pref width:2em;”);
setConstraints(文本字段、列、行);
box.getChildren().add(textField);
}
}
设置约束(框、块列、块行);
board.getChildren().add(框);
}
}
样式设置只是适当调整文本字段的大小,并在每个“块”(即“内部网格窗格”)周围放置黑色边框
SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class SudokuBoard extends Application {
@Override
public void start(Stage primaryStage) {
GridPane board = new GridPane();
for (int blockColumn = 0; blockColumn < 3 ; blockColumn++) {
for (int blockRow = 0; blockRow < 3; blockRow++) {
GridPane box = new GridPane();
box.setStyle("-fx-background-color: black, -fx-control-inner-background; -fx-background-insets: 0, 2; -fx-padding: 2;");
for (int column = 0; column < 3; column++) {
for (int row = 0 ; row < 3; row++) {
TextField textField = new TextField("0");
textField.setStyle("-fx-pref-width: 2em;");
GridPane.setConstraints(textField, column, row);
box.getChildren().add(textField);
}
}
GridPane.setConstraints(box, blockColumn, blockRow);
board.getChildren().add(box);
}
}
primaryStage.setScene(new Scene(board));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
公共类SudokuBoard扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
GridPane board=新的GridPane();
for(int blockColumn=0;blockColumn<3;blockColumn++){
对于(int blockRow=0;blockRow<3;blockRow++){
GridPane box=新建GridPane();
box.setStyle(“-fx背景颜色:黑色,-fx控件内部背景;-fx背景插入:0,2;-fx填充:2;”);
for(int列=0;列<3;列++){
对于(int行=0;行<3;行++){
TextField TextField=新的TextField(“0”);
textField.setStyle(“-fx pref width:2em;”);
setConstraints(文本字段、列、行);
box.getChildren().add(textField);
}
}
设置约束(框、块列、块行);
board.getChildren().add(框);
}
}
初级阶段。设置场景(新场景(板));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
看起来您正在创建
9x9=81
“内部”网格窗格,而此时您应该创建其中的3x3=9
。然后,您只需将每组9个中的最后一个添加到板中。你需要像这样的东西
GridPane board = new GridPane();
for (int blockColumn = 0; blockColumn < 3 ; blockColumn++) {
for (int blockRow = 0; blockRow < 3; blockRow++) {
GridPane box = new GridPane();
box.setStyle("-fx-background-color: black, -fx-control-inner-background; -fx-background-insets: 0, 2; -fx-padding: 2;");
for (int column = 0; column < 3; column++) {
for (int row = 0 ; row < 3; row++) {
TextField textField = new TextField("0");
textField.setStyle("-fx-pref-width: 2em;");
GridPane.setConstraints(textField, column, row);
box.getChildren().add(textField);
}
}
GridPane.setConstraints(box, blockColumn, blockRow);
board.getChildren().add(box);
}
}
GridPane board=new GridPane();
for(int blockColumn=0;blockColumn<3;blockColumn++){
对于(int blockRow=0;blockRow<3;blockRow++){
GridPane box=新建GridPane();
box.setStyle(“-fx背景颜色:黑色,-fx控件内部背景;-fx背景插入:0,2;-fx填充:2;”);
for(int列=0;列<3;列++){
对于(int行=0;行<3;行++){
TextField TextField=新的TextField(“0”);
textField.setStyle(“-fx pref width:2em;”);
setConstraints(文本字段、列、行);
box.getChildren().add(textField);
}
}
设置约束(框、块列、块行);
board.getChildren().add(框);
}
}
样式设置只是适当调整文本字段的大小,并在每个“块”(即“内部网格窗格”)周围放置黑色边框
SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class SudokuBoard extends Application {
@Override
public void start(Stage primaryStage) {
GridPane board = new GridPane();
for (int blockColumn = 0; blockColumn < 3 ; blockColumn++) {
for (int blockRow = 0; blockRow < 3; blockRow++) {
GridPane box = new GridPane();
box.setStyle("-fx-background-color: black, -fx-control-inner-background; -fx-background-insets: 0, 2; -fx-padding: 2;");
for (int column = 0; column < 3; column++) {
for (int row = 0 ; row < 3; row++) {
TextField textField = new TextField("0");
textField.setStyle("-fx-pref-width: 2em;");
GridPane.setConstraints(textField, column, row);
box.getChildren().add(textField);
}
}
GridPane.setConstraints(box, blockColumn, blockRow);
board.getChildren().add(box);
}
}
primaryStage.setScene(new Scene(board));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
公共类SudokuBoard扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
GridPane board=新的GridPane();
for(int blockColumn=0;blockColumn<3;blockColumn++){
对于(int blockRow=0;blockRow<3;blockRow++){
GridPane box=新建GridPane();
box.setStyle(“-fx背景颜色:黑色,-fx控件内部背景;-fx背景插入:0,2;-fx填充:2;”);
for(int列=0;列<3;列++){
对于(int行=0;行<3;行++){
TextField TextField=新的TextField(“0”);
textField.setStyle(“-fx pref width:2em;”);
setConstraints(文本字段、列、行);
box.getChildren().add(textField);
}
}
GridPane.setConstraints(框,