FocusLost вызывается после меню - PullRequest
1 голос
/ 01 декабря 2011

У меня есть MenuItem с сочетанием клавиш, чтобы сохранить данные временного JTextFied и распечатать его

Функция сохранения вызывается при событии FocusLost JTextField, а печать вызывается через actionIistenms MenuItems и запускаетсякогда я нажимаю на MenuItem, а также когда я нажимаю клавишу быстрого вызова для элемента меню (например: f1)

Проблема состоит в том, что когда я непосредственно нажимаю f1 (ярлык для элемента menu), событие focusLost для Textfiedсрабатывает только после того, как пункт меню выполнил свое действие, тогда как когда я захожу в меню и нажимаю, сначала срабатывает focuslost, затем следует действие меню

Есть ли способ принудительно вызвать потерю фокусировки, чтобы даже приклавиша быстрого вызова, событие focusLost запускается первым

Пробуется с использованием requestfocusinWindow, setText (выполняется в других текстовых полях демо только для принудительной установки focusLost)

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

1) Я думаю, что это невозможно на языках программирования, подробнее об этом в теории Подсистема фокуса AWT и Как использовать подсистему фокуса ,

2) вы должны перенаправить этот процесс сохранения в задание Backgroung, и перед этим вы можете проверить, выбраны ли JMenu и JMenuItem или нет, для этой проверки используйте только ButtonModel, иначе не делайте этого, потому что ваш GUI ждет этих процессов

3) Другой выбор - сохранить значения периодических баз от JComponents до некоторых Array, там вы можете проверить, было ли значение изменено, все изменения должны быть проверены / сохранены из Задачи Backgroung, без какого-либо влияния на Swing GUI

4) Самый простой способ, как создать что-то в качестве Таймера, - это обернуть некоторые логики в Runnable#Thread, с задержкой на Thread.sleep(int), но исключительно внутри Runnable#Thread только

1 голос
/ 01 декабря 2011

Обычно подозревается, когда вы хотите «принудительно» применить focusLost, поскольку целью этого события является то, что пользователь сделал что-то, чтобы изменить состояние фокуса приложения.Когда вы говорите, что F1 - это ярлык пункта меню, вы имеете в виду, что это ярлык к тому же коду, который выполняется при выборе меню, или вы настроили его как мнемонику меню?

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

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