Последовательность событий в Java - PullRequest
3 голосов
/ 04 мая 2010

У меня есть два события для двух отдельных компонентов, но есть проблема. Событие stateChanged в JTabbedPane вызывается до события focusLost в JFormattedField. Есть ли способ заставить событие stateChange запускаться после события focusLost.

Спасибо, Тунец

Ответы [ 2 ]

3 голосов
/ 04 мая 2010

Хотя Java гарантирует, что событие будет запущено, порядок не гарантируется и может отличаться на разных платформах.

Потенциальное решение - обернуть код stateChanged в SwingUtilities.invokeLater (). Это поместит код в конец потока диспетчеризации событий (EDT), поэтому он должен выполняться после кода focusLost.

3 голосов
/ 04 мая 2010

Из того, что я проверил в источниках JTabbedPane, метод fireStateChanged() запускает событие изменения фокуса, если необходимо, до , вызывая фактическое событие stateChanged для слушателей.

Так что в теории это должно было случиться раньше. Однако, поскольку я не знаю, что происходит в вызываемом методе (SwingUtilities2.tabbedPaneChangeFocusTo(newComp)), весьма вероятно, что событие перейдет в другой поток, связанный с управлением фокусом.

fireStateChanged() - это защищенный метод, поэтому вы можете переопределить его в своем собственном JTabbedPane и убедиться, что поведение соответствует желаемому.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...