Использование KeyboardFocusManager - PullRequest
2 голосов
/ 26 июля 2011

Я пытаюсь добавить KeyEventPostProcessor в несколько всплывающих окон для каждого отображаемого всплывающего окна, например:

    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventPostProcessor(new KeyEventPostProcessor() {

        public boolean postProcessKeyEvent(KeyEvent e) {
            //do something
            return true;
        }
    });

Но проблема в том, что KeyEventPostProcessors будет уведомляться в порядкев котором они были добавлены "и мне нужен обратный порядок.Могу я это сделать?

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Вы можете создать свой собственный класс, реализующий KeyEventPostProcessor, которому вы отдаете все остальные Процессоры, и позволить своему собственному классу вызывать процессоры в порядке, который вам нравится (очевидно, только добавляя свой собственный процессор к KeyboardFocusManager.)Это, однако, позволит только возвращать одно возвращаемое значение при вызове, вместо того, чтобы каждый процессор возвращал значение.

Если это проблема, то вам, вполне возможно, придется удалить все процессоры иповторно добавьте их.В KeyboardFocusManager есть метод с именем getKeyEventPostProcessors(), который возвращает все процессоры.Вы можете извлечь этот список, выполнить итерацию по нему и удалить процессоры, используя removeKeyEventPostProcessor(), сначала добавить свой собственный, а затем снова выполнить итерацию по списку и добавить все предыдущие процессоры.Однако это будет довольно неэффективно.

Если вы добавляете все процессоры одновременно, но хотите изменить порядок, вы можете временно сохранить их в списке, а затем просмотреть список в обратном порядке, добавив их в KeyboardFocusManager.только когда у вас уже есть все готовые процессоры.

Кроме обходных путей, описанных выше, в Java API нет никакого способа заставить его отправлять события в обратном порядке.

1 голос
/ 26 июля 2011

Это кажется тривиальным, но добавьте их в обратном порядке, если вы хотите, чтобы они были уведомлены об этом.

(Если вы добавляете их в цикле, просто просмотрите их в обратном порядке, если вы добавляете их как вызовы из других классов, затем сохраняйте дополнения до тех пор, пока все ваши всплывающие окна не будут завершены, и добавьте сохраненные дополнения в обратном порядке)

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