0

数独パズルを解く Java コードに取り組んでいます。ロジックはまだ実装されていませんが、ループを使用して JComboBox を作成する際に問題が発生しました。私のコードはエラーなしでコンパイルおよび実行されますが、右下の 3x3 ペインのみが JLabels に変換されます。この問題は、以下のループが原因であると考えています。

for (int boxRow = 0; boxRow<3; boxRow++){
  for(int boxCol = 0; boxCol<3; boxCol++){
    boxes[boxRow][boxCol] = new JPanel();
    boxes[boxRow][boxCol].setLayout(new GridBagLayout());
    for (int row = 0; row < 3; row++){
      for(int col = 0; col < 3; col++){
        comboBox[row][col] = new JComboBox(sudokuChoose);
        constraints.weightx = 1;
        constraints.weighty = 1;
        constraints.gridx = col;
        constraints.gridy = row;
        boxes[boxRow][boxCol].add(comboBox[row][col], constraints);
      }
    }
    constraints.weightx = 1;
    constraints.weighty = 1;
    constraints.gridx = boxRow;
    constraints.gridy = boxCol;
    add(boxes[boxRow][boxCol], constraints);
    boxes[boxRow][boxCol].setVisible(true);
  }
}


    for(int boxRow = 0; boxRow<3; boxRow++){
  for(int boxCol = 0; boxCol<3; boxCol++){
    labelBoxes[boxRow][boxCol] = new JPanel();
    labelBoxes[boxRow][boxCol].setLayout(new GridBagLayout());
    for(int row = 0; row < 3; row++){
      for(int col = 0; col < 3; col++){
        tempComboText = (String)comboBox[row][col].getSelectedItem();
        label[row][col] = new JLabel();
        //System.out.println(comboBox[row][col]);
        //System.out.println((String)comboBox[row][col].getSelectedItem());
        label[row][col].setText(tempComboText);
        constraints.weightx = 1;
        constraints.weighty = 1;
        constraints.gridx = col;
        constraints.gridy = row;
        add(label[row][col], constraints);
        label[row][col].setVisible(true);
      } 
    }
  }
}

1 つ目は、JPanel にある 9 つの JComboBox を作成します。9 つの JPanel があり、合計 81 の JComboBox が作成されます。ただし、ボックスが作成されているとき、各 JPanel 内の対応する各 JComboBox の名前は同じです。したがって、最初の 8 つの JPanel には、JComboBox に関連付けられた名前はありません。2 番目では、1 番目と同じループ構造を使用して JComboBox を変換しますが、最初の 8 つの JPanel の JComboBox には名前がないため、到達できず、そこから情報を読み取ることができません。これを回避する方法について何か考えはありますか?

4

0 に答える 0