2015-11-23 2 views
0

Я начинаю использовать JavaFX и должен создать интерактивную доску Sudoku для окончательного проекта. Мой план состоял в том, чтобы добавить девять 3 на 3 GridPanes к 3 на 3 GridPane (чтобы сделать красивую смотрящую панель с обложенными блоками), но не может показаться, что это так, как у меня.Добавление GridPane к GridPane

Вот выдержка из моего метода создания blankBoard(). доска и коробка предопределены как глобальные переменные GridPane:

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); 

     } 

    } 

Все это дает мне это 3 по 3 GridPane как таковой: GridPane

Есть ли другой способ сделать это или просто добавить границы между просто некоторые столбцы и строки в 9 на 9 GridPane?

ответ

2

Похоже, что вы создаете «внутренние» сетчатые панели, когда вы должны создавать 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); 

    } 
} 

Настройки стиля просто размер текстовых полей соответствующим образом и поместить черную рамку вокруг каждого из «блоков» (то есть «внутренние панели сетки»).

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); 
    } 
} 

enter image description here

Смежные вопросы