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, чтобы он был квадратным, и я не могу применить только одно целое число на текстовое поле.
Я что-то упускаю действительно очевидное?