2017-07-07 2 views
0

Mein Ziel ist es, eine GridView zu erstellen, die größenveränderbar ist, immer quadratisch und enthält eine gleiche Anzahl von Zeilen und Spalten, so dass ihre Zellen auch quadratisch sind, ähnlich einem Reversi oder Schachbrett.Square GridPane der quadratischen Zellen

Hier ist eine kleine Illustration, das Gitter ist horizontal im Inhaltsfenster zentriert.

enter image description here

Ich habe eine Vielzahl von unterschiedlichen Bindungsvarianten und Layouts versucht, aber ich kann ziemlich es nicht richtig machen. Hier ist mein Controller (bisher):

public class Controller { 

    public HBox contentPane; 

    public void initialize() { 
     final int sideLength = 10; 

     final GridPane gridPane = new GridPane(); 

     gridPane.setStyle("-fx-border-color: red; -fx-border-insets: 2"); 

     HBox.setHgrow(gridPane, Priority.ALWAYS); 

     for (int i = 0; i < sideLength; i++) { 
      final ColumnConstraints columnConstraints = new ColumnConstraints(Control.USE_PREF_SIZE, 10, Double.MAX_VALUE); 
      columnConstraints.setHgrow(Priority.ALWAYS); 
      gridPane.getColumnConstraints() 
        .add(columnConstraints); 

      final RowConstraints rowConstraints = new RowConstraints(Control.USE_PREF_SIZE, 10, Double.MAX_VALUE); 
      rowConstraints.setVgrow(Priority.ALWAYS); 

      gridPane.getRowConstraints() 
        .add(rowConstraints); 
     } 

     contentPane.getChildren().add(gridPane); 

     for (int i = 0; i < sideLength; i++) { 
      for (int j = 0; j < sideLength; j++) { 
       final GameCell child = new GameCell(); 
       GridPane.setRowIndex(child, i); 
       GridPane.setColumnIndex(child, j); 
       gridPane.getChildren().add(child); 
      } 
     } 
    } 
} 

und die Zellen, die angeblich Formen lates enthalten, aber ich habe aber Circle s für jetzt nur noch um es zu testen:

Dies ist zur Zeit, wie es aussieht:

enter image description here

Antwort

0

mit viel Bastelei Gelöst es, hier ist meine Lösung für die Zukunft:

GameCell:

public class GameCell extends Pane { 
    public GameCell() { 
     final Circle circle = new Circle(10); 
     circle.radiusProperty().bind(Bindings.divide(widthProperty(), 4)); 

     circle.centerXProperty().bind(widthProperty().divide(2)); 
     circle.centerYProperty().bind(widthProperty().divide(2)); 

     getChildren().add(circle); 
    } 
} 

GamePane:

public class GamePane extends HBox { 
    public GamePane() { 
     final VBox vBox = new VBox(); 

     vBox.alignmentProperty().set(Pos.CENTER); 
     alignmentProperty().set(Pos.CENTER); 

     final GridPane gridPane = new GridPane(); 

     final NumberBinding binding = Bindings.min(widthProperty(), heightProperty()); 

     gridPane.setMinSize(200, 200); 
     vBox.prefWidthProperty().bind(binding); 
     vBox.prefHeightProperty().bind(binding); 
     vBox.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); 

     vBox.setFillWidth(true); 
     VBox.setVgrow(gridPane, Priority.ALWAYS); 

     final int sideLength = 8; 
     for (int i = 0; i < sideLength; i++) { 
      final ColumnConstraints columnConstraints = new ColumnConstraints(Control.USE_PREF_SIZE, Control.USE_COMPUTED_SIZE, Double.MAX_VALUE); 
      columnConstraints.setHgrow(Priority.SOMETIMES); 
      gridPane.getColumnConstraints().add(columnConstraints); 

      final RowConstraints rowConstraints = new RowConstraints(Control.USE_PREF_SIZE, Control.USE_COMPUTED_SIZE, Double.MAX_VALUE); 
      rowConstraints.setVgrow(Priority.SOMETIMES); 
      gridPane.getRowConstraints().add(rowConstraints); 
     } 

     vBox.getChildren().add(gridPane); 

     getChildren().add(vBox); 

     HBox.setHgrow(this, Priority.ALWAYS); 

     for (int i = 0; i < sideLength; i++) { 
      for (int j = 0; j < sideLength; j++) { 
       final Pane child = new GameCell(); 

       GridPane.setRowIndex(child, i); 
       GridPane.setColumnIndex(child, j); 
       gridPane.getChildren().add(child); 
      } 
     } 
    } 
} 
Verwandte Themen