JFormattedTextField не очищен должным образом

Я делаю это задание, создаю программу, которая решает судоку. У меня есть панель с сеткой SudokuTextBox, расширяет JFormattedTextField. У меня есть MaskFormatter, так что он принимает только одно целое число на текстовое поле. Тогда в моей панели у меня есть этот код, когда ключ отпущен.

 public void keyReleased(KeyEvent e) {
  SudokuTextBox tb = (SudokuTextBox) e.getSource();
  int row = tb.getRow();
  int col = tb.getCol();
  int value = toInteger(tb.getText());
  //System.out.println(value);
  if(sudoku.isValid(row, col, value)) {
   sudoku.set(row, col, value);
  }
  else {
   sudoku.set(row, col, 0);
   tb.setText(null);
  }
  tb.setCaretPosition(0);
  sudoku.print();
 }

Дело в том, что если я введу правильное значение в текстовое поле, я вернусь и введу недопустимое значение (по правилам судоку), текстовое поле очищается. Но затем, когда я перехожу на вкладку вперед, предыдущее действительное значение отображается в текстовом поле. Моя sudokumatrix, которая содержит все введенные числа, очищает значение, как и должно быть, поэтому оно находится только в соответствующем текстовом поле.

Чтобы сделать вещи еще более запутанными, когда я меняю «SudokuTextBox расширяет JFormattedTextField» на «SudokuTextBox расширяет JTextField», он работает как шарм. Но я не могу установить размер JTextField, чтобы он был квадратным, и я не могу применить только одно целое число на текстовое поле.

Я что-то упускаю действительно очевидное?

Ответы на вопрос(2)

Ваш ответ на вопрос