2016-04-29 9 views
1

私はsudokuアプリケーションで作業していますが、私の進歩を妨げる問題があります。私がやろうとしているのは、このスードボードを私がループで作成して、StackPaneにLabelを追加し、そのStackPaneをGridPaneに指定された場所に入れることです。だから私はこのボードにセットサイズを強制し、そのポイントを超えて成長させようとしていない。JavaFXは、GridPaneをBorderPaneの中心に収めることができません

私は、GridPaneをAnchorPaneに入れ、BorderPaneの中央にAnchorPaneを収めようとするなど、さまざまなことを研究して試してみましたが、常にウィンドウの外側を超えるように見えます。スドクボードの行数と列数が多すぎます。

私がしようとしているのは、すべてのボードに設定されたサイズを取得することです。そのため、必要に応じて、そのポイントまで伸ばしたり、必要に応じて縮小したりします。接続された画像は、GridPaneを中央に置いたBorderPaneを使用しています。 16x16は完全にフィットし、25x25はウィンドウの外に出るだけです。

ヘルプは高く評価されます。

25x25を作成しようとしたときのウィンドウの外観。

http://i.imgur.com/BrJrpiY.png

ウィンドウは16×16を作成しようとしたときにどのように見えるかの写真。 これはまた、インセットを使用して上部に向かって押し込むので、あまり外には見えません。

http://i.imgur.com/7a0QJx8.jpg

答えて

1

あなたがしなければならないのは、あなたのニーズに合わせてグリッド制約を設定されています。これを行うには、をGridRowStackPaneは不要)に入れ、vAlignmentとhAlignmentをCenterに設定します。ラベルのvGrowとhGrowをPriority.ALWAYSに設定します。

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     GridPane gridPane = createMainGrid(2, 2); 
     gridPane.setAlignment(Pos.CENTER); 
     gridPane.setHgap(10); 
     gridPane.setVgap(10); 

     Scene scene = new Scene(gridPane); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private GridPane createMainGrid(int rows, int columns) { 
     GridPane grid = new GridPane(); 

     for (int colIdx = 0; colIdx < columns; colIdx++) { 
      for (int rowIdx = 0; rowIdx < rows; rowIdx++) { 
       GridPane innerGrid = createGrid(4, 4); 
       grid.add(innerGrid, colIdx, rowIdx); 
       GridPane.setConstraints(innerGrid, colIdx, rowIdx, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS); 
      } 
     } 
     return grid; 
    } 

    private GridPane createGrid(int rows, int columns) { 
     GridPane grid = new GridPane(); 

     Random random = new Random(); 

     for (int colIdx = 0; colIdx < columns; colIdx++) { 
      for (int rowIdx = 0; rowIdx < rows; rowIdx++) { 
       Label label = new Label(String.valueOf(random.nextInt(rows * columns))); 
       label.setMinSize(30, 30); 
       label.setAlignment(Pos.CENTER); 
       grid.add(label, colIdx, rowIdx); 
       GridPane.setConstraints(label, colIdx, rowIdx, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS); 
      } 
     } 
     return grid; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
関連する問題