Jtable может сохранить данные каждый раз, когда ячейка теряет фокус?

Некоторое время назад я попытался записать инструмент, который автоматически генерирует модульные тесты на c файлы.

Для предварительной обработки я провел файлы через GCC. Вывод ужасен, но можно легко проследить где в исходном коде из предварительно обработанного файла. Но для Ваших потребностей Вам еще, возможно, понадобилось бы что-то.

я использовал Метр как основа для синтаксического анализатора C. Это - открытый исходный код и использует закон и yacc. Это помогло встать и работающий в скором времени, полностью не понимая закон & yacc.

я также записал приложение C начиная с закона & решение для yacc не могло помочь мне проследить функциональность через функции и проанализировать структуру целой функции в одной передаче. Это стало неудобным в сопровождении в скором времени и отказалось.

23
задан Electrons_Ahoy 31 October 2009 в 00:23
поделиться

2 ответа

Table Stop Editing объясняет, что происходит, и дает несколько простых решений.

26
ответ дан 29 November 2019 в 01:43
поделиться

Вам необходимо добавить слушателя фокуса . Учитывая, что JTable в основном является контейнером своих компонентов ячеек, вам действительно нужен прослушиватель фокуса для каждой ячейки в вашей таблице, которая должна вести себя указанным вами образом.

Для этого вам необходимо создать собственный редактор ячеек, который обертывает компонент ячейки, имеющий зарегистрированный прослушиватель фокуса. И когда вы получаете обратный вызов для события потери фокуса, вы выполняете сохранение данных по мере необходимости.

Это в значительной степени детализирует большую часть того, что вам нужно сделать . Подробностей реализации прослушивателя фокуса здесь нет, но это довольно просто.

Допустим, вы действительно используете JTextComponent в качестве компонента ячейки. Затем:

public void focusLost(FocusEvent e) {
   JTextComponent cell = (JTextComponent) e.getSource();  
   String data = cell.getText();

   // TODO: save the data for this cell
}

[ps edit]:

Поток, который вызывает вас с этим событием, является потоком отправки. НЕ используйте его для действий с большой задержкой. Но если вы просто переворачиваете биты в куче, все должно быть в порядке.

5
ответ дан 29 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: