В Java могу ли я вызвать процедуру каждый раз, когда поток отправки событий возвращается из обработки входного события?

Я работаю над графическим интерфейсом, и у меня есть процедура обновления дисплея, когда что-то меняется внизу:

void update() {
    if (needsUpdating) {
        // ...
        needsUpdating = false;
    }
}

Я пытаюсь избежать "слишком частого" вызова update() -- т.е. если многие свойства установлены последовательно, я бы предпочел, чтобы update() вызывался только один раз.

Возможно ли вызывать update() после каждого события пользовательского ввода -- клавиша/мышь/и т.д.? Я мог бы сделать это вручную, но у меня так много обработчиков событий, и я знаю, что забуду — может ли Java сделать это за меня?


person Owen    schedule 09.05.2011    source источник


Ответы (2)


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

http://tips4java.wordpress.com/2009/08/30/global-event-listeners/

Настоящая проблема, похоже, заключается в дизайне вашего приложения:

Я мог бы сделать это вручную, но у меня так много обработчиков событий, и я знаю, что забуду

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

https://softwareengineering.stackexchange.com/questions/71022/what-is-good-programming-practice-for-structuring-java-project

person kleopatra    schedule 09.05.2011
comment
Возможно Вы правы. Как я думал, фактическое условие нереализации, которое я ищу, это то, что пользователь что-то сделал, и я надеялся не дублировать условие, что пользователь сделал что-то, если оно уже существовало. - person Owen; 09.05.2011

Вы можете использовать свою собственную очередь событий, создав подкласс EventQueue< /а>. С его помощью контролируйте все события и делайте обновления, когда захотите. См. Как заменить AWT EventQueue собственной реализацией .

Но я не понимаю ваш вариант использования: свинг обновляет графический интерфейс для всех событий, почему вы хотите делать свои собственные?

person Istao    schedule 09.05.2011
comment
-1 за вызов кавалерии - person kleopatra; 09.05.2011
comment
Вы правы, но это зависит от варианта использования. Если Оуэн новичок, вы правы во всех случаях :-) - person Istao; 09.05.2011