Заставить JTable зафиксировать данные в модели, пока она находится в режиме редактирования.

У меня есть JTable следующим образом.

альтернативный текст

Таким образом, пока JTable все еще находится в режиме редактирования (курсор клавиатуры мигает в столбце «Дивиденд»), нажатие кнопки «ОК» не приведет к фиксации данных в модели таблицы. Нажатие OK просто закрывает диалоговое окно.

Мне нужно явно нажать ENTER, чтобы зафиксировать данные в табличной модели.

Пока JTable все еще находится в режиме редактирования, могу ли я перед закрытием диалогового окна сообщить JTable, сказав: "Привет, пора зафиксировать изменения в вашей модели"

Исходный код этого диалогового окна выглядит следующим образом: Исходный код диалогового окна. Посмотрите на jButton1ActionPerformed исполняемый код при нажатии OK.


person Cheok Yan Cheng    schedule 07.10.2010    source источник
comment
Вероятно, вы использовали IDE для создания кода GUI. Но не могли бы вы изменить имена переменных на что-то более понятное. Очень трудно читать, когда все помечено button1 button2 label1   -  person Sean    schedule 07.10.2010
comment
Прости за это. Посмотрите на jButton1ActionPerformed исполняемый код при нажатии OK.   -  person Cheok Yan Cheng    schedule 07.10.2010


Ответы (3)


Я не уверен, что это сработает (было бы неплохо иметь SCCE), но попробуйте следующее:

TableCellEditor editor = table.getCellEditor();
if (editor != null) {
  editor.stopCellEditing();
}
person Guillaume    schedule 07.10.2010

Редактирование остановки таблицы предлагает несколько подходов.

ИЗМЕНИТЬ

Пример из статьи:

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

Пример из статьи:

if (table.isEditing())
    table.getCellEditor().stopCellEditing();
person camickr    schedule 07.10.2010
comment
На этом веб-сайте есть довольно полезные советы и рекомендации по программированию на Swing. Можно узнать вы автор? - person Cheok Yan Cheng; 08.10.2010

Чтобы вся стабильная версия полностью прекратила редактирование в любом состоянии (редактирование или нет), вы можете вызвать редактирование остановлено:

    table.editingStopped(new ChangeEvent(table));

Таким образом, вам не нужно проверять наличие редакторов/состояний/и т.д.

person John Gardner    schedule 07.10.2010
comment
документы .oracle.com/javase/8/docs/api/javax/swing/ Я действительно хотел, чтобы это был правильный ответ, потому что он прост и элегантен, однако, согласно документации, этот метод предназначен для внутреннего использования JTable. Технически нет никаких гарантий, что он будет доступен или будет работать так же в будущих версиях. При этом я не вижу, чтобы библиотеки Java Swing получали какие-либо серьезные обновления в ближайшее время, поэтому, хотя это технически небезопасно, я полагаю, что это все же практичное решение. - person Jonathan; 04.06.2019