Могу ли я запустить 2 действия с графическим интерфейсом в EDT? - PullRequest
1 голос
/ 21 июня 2010

В JDialog, когда пользователь щелкает JButton, я хочу выполнить 2 действия с графическим интерфейсом в EDT:

  1. Отображение еще одного небольшого JDialog со значком занятого в нем, чтобы сказать пользователю: «Пожалуйста, подождите, поканеправильный процесс заканчивается ".
  2. Вставка большого количества записей в JTable.

Когда я пытаюсь выполнить оба действия, диалоговое окно" Пожалуйста, подождите "блокирует процесс вставки, какожидается.

Как вы видите, оба действия должны быть выполнены в EDT ... так что есть ли решение для этого?

Ответы [ 3 ]

3 голосов
/ 21 июня 2010

Нет, оба действия не должны выполняться в EDT.

Ваши записи должны быть вставлены не в JTable, а в его TableModel, вызывая события обновления.Таким образом, вы можете легко обновлять таблицу, пока отображается ваш диалог.

После обновления модели таблицы запустите событие, чтобы убедиться, что таблица перекрашена, и она будет работать.

1 голос
/ 21 июня 2010

Большинство TableModels, например DefaultTableModel, вызывают методы fireXXX, как только модель обновляется, так что да, вы хотите, чтобы обновление модели выполнялось в EDT, чтобы таблица была перекрашена должным образом.

«Пожалуйста, подождите, пока не завершится неправильный процесс».

Используйте неопределенный JProgressBar

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

1 голос
/ 21 июня 2010

Второе не нужно делать в EDT.Создайте поток для добавления элементов в модель JTable, но иногда этот поток использует SwingWorker.invokeLater () для запуска событий "fireTableDataChanged".

...