Я думаю, вы можете установить идентификатор с массивом текстового поля, который должен быть уникальным значением.
Вы можете создать массив полей, определенных как;
JTextField[] txtfields = new JTextField[3*3*9];
и счетчик с инкрементным значением.
int cnt = 0;
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 3; ++col) {
JPanel box = new JPanel(new GridLayout(3, 3));
box.setBorder(BorderFactory.createLineBorder(Color.BLACK));
for (int cell = 0; cell < 9; ++cell) {
txtfields[cnt] = new JTextField(2);
box.add(txtfields[cnt++]);
}
board.add(box);
}
}
Вы можете найти некоторое значение текстового поля в том же порядке в слушателе действий, а затем отобразить его в текстовой области.
solveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("I was pressed");
StringBuilder stbuld = new StringBuilder();
int cnt = 0;
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 3; ++col) {
for (int cell = 0; cell < 9; ++cell) {
String value = txtfields[cnt].getText();
if(value != null && !value.equals(""))
{
System.out.println(row + ":" + col + ":" + ":" + cell + ":" + value);
stbuld.append("["+row + "][" + col + "][" + cell + "] = " + value + "\n");
}
cnt++;
}
}
}
output.setText(stbuld.toString());
}
});
Вывод jframe будет следующим:

Хорошего кодирования ...