В моем коде у меня есть несколько JTextFields, а также отдельный JTable с несколькими столбцами и строками. Я хочу проверить определенную ячейку в моей таблице, и если она недействительна, не позволяйте пользователю перемещать курсор в другое поле. Мой код работает правильно, если пользователь перемещает курсор в другую ячейку таблицы (другую строку или столбец), но если я перемещаю курсор в другое поле формы, курсор перемещается. Я проверил, что моя функция stopCellEditing вызывается и возвращает false. Я делаю границу красной, когда она недействительна. Это работает правильно и, как и ожидалось, просто курсор движется.
Вот мой код.
Редактор ячеек, используемый для соответствующего столбца, устанавливается с помощью
// Set up the verifier to make sure the user has entered a valid value
statusTable.getColumn(statusTable.getColumnName(1)).
setCellEditor(new CellEditor(new SvidVerifier(), this));
И мой расширенный DefaultCellEditor
class CellEditor extends DefaultCellEditor {
InputVerifier verifier = null;
ModView view = null;
public CellEditor(InputVerifier verifier, ModView view) {
super(new JTextField());
this.verifier = verifier;
this.view = view;
}
@Override
public boolean stopCellEditing() {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().
getFocusOwner() == view.publicBrowseButton) {
super.cancelCellEditing();
return true;
}
boolean canStop = verifier.verify(editorComponent) &&
super.stopCellEditing();
return canStop;
}
}
и мой верификатор
class IdVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
try {
if ((Integer.parseInt(tf.getText()) >= 1) &&
(Integer.parseInt(tf.getText()) <= 32)) {
tf.setBorder(new LineBorder(
UIManager.getColor("activeCaptionBorder")));
return true;
} else {
tf.setBorder(new LineBorder(Color.RED));
return false;
}
} catch (Exception ex) {
tf.setBorder(new LineBorder(Color.RED));
return false;
}
}
}
Спасибо за вашу помощь.