2016-05-11 18 views
0

GridPaneに整数や文字列を塗りつぶすにはどうしたらいいですか?私は現在、SudokuのGUIに取り組んでおり、動作させることができません。私はすでに、java.fx.scene.controlクラスであるため、Java FX Labelで表示することは不可能であることを知っています。私は何とかスムーク値をGridPaneの対応する座標に転送する必要があります。数値/文字列でのGridPaneの塗りつぶし

public class Controller { 

GridPane sudokuGrid; 
private Label[][] label = new Label[9][9]; 

public void generateButtonClicked(ActionEvent actionEvent) { 
    SudokuBoard board = new SudokuBoard(); 
    BacktrackingSudokuSolver solver = new BacktrackingSudokuSolver(); 
    solver.fillBoard(0, 0, board); 
    for (int i = 0; i < 9; i++) { 
     for (int j = 0; j < 9; j++) { 
      label[i][j] = String.valueOf(board.getDigit(i, j).getNum()); 
      sudokuGrid.add(???, i, j); 
     } 
    } 
} 
+0

ここに例があります:http://stackoverflow.com/questions/36949054/javafx-cant-get-gridpane-to-fit-in-the-center-of-borderpane/36949900#36949900 – jns

答えて

2

修正

私はすでにそれがjava.fx.scene.controlクラスなので、それがJava FXラベルでそれを表示することは不可能だということを知っています。

これは正しくありません。ラベルは値を表示するためのものです。あなたのループ内

ソリューション

、ラベルを作成し、グリッドに置き:追加質問へ

label[i][j] = new Label(String.valueOf(board.getDigit(i, j).getNum())); 
sudokuGrid.add(label[i][j], i, j); 

回答

あなたはクリアする方法を知っていますすべての充填後にグリッドの内容は?ボタンをクリックするたびに数字に数字が表示されます

グリッドを作成するときには、グリッドにラベルを1回だけ追加します。グリッドにラベルを追加したら、ラベルを再度追加する必要はありません。上記のコードをループで実行し、グリッドを初期化するために使用します。

初期化が完了したら、必要に応じてラベルのテキストを更新するだけです。たとえば、ときに発生するボタンがクリックされた:あなたは空白のラベルを表示したい場合は、ちょうど彼らのnullにテキストまたは空の文字列を設定

for (int i = 0; i < 9; i++) { 
    for (int j = 0; j < 9; j++) { 
     label[i][j].setText(
       String.valueOf(board.getDigit(i, j).getNum()) 
     ); 
    } 
} 

for (int i = 0; i < 9; i++) { 
    for (int j = 0; j < 9; j++) { 
     label[i][j].setText(null); 
    } 
} 

しかし、私はドン」にトンクレアにそれを使用し、それはFXMLファイルに

を宣言していますbeacuseあなたのFXMLコントローラはinitialize()メソッドを持つことができ、すべてのクリックボタンで新しいグリッドを作成あなたのグリッドにラベルを貼ります。

+0

すべての充填後にグリッドの内容をクリアするには? –

+0

ボタンをクリックするたびに数字が数字で表示されますが、すべてのクリックボタンで新しいグリッドを作成するのではなく、fxmlファイルで宣言しています –

関連する問題