我正在尝试将KeyEventPostProcessor添加到几个弹出窗口中,对于我显示的每个弹出窗口,如下所示:

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

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

但是问题是“KeyEventPostProcessors将按照添加顺序通知”,而我需要相反的顺序。我可以那样做吗?

最佳答案

您可以创建自己的类来实现KeyEventPostProcessor,将所有其他Processor赋予该类,然后让您自己的类按您喜欢的顺序调用处理器(显然仅将您自己的处理器添加到KeyboardFocusManager。)但这只会使有可能在调用时返回单个返回值,而不是每个处理器都返回一个值。

如果这是一个问题,那么您很可能必须删除所有处理器并重新添加它们。 KeyboardFocusManager有一个称为getKeyEventPostProcessors()的方法,该方法将返回所有处理器。您可以检索该列表,对其进行迭代,然后使用removeKeyEventPostProcessor()删除处理器,首先添加自己的处理器,然后再次对列表进行迭代,并添加所有以前的处理器。然而,这将是相当低效的。

如果您一次添加所有处理器,但要颠倒顺序,则可以将它们暂时保存到列表中,然后以相反的顺序遍历该列表,仅当所有处理器都准备就绪时,才将它们添加到KeyboardFocusManager中。

除了上述变通办法之外,Java API中似乎没有任何方法可以使它以相反的顺序发送事件。

07-26 09:27