使用修改键更改操作组

Change action group with modifier key

我有一个动作组,里面有很多动作。类似于按 Ctrl + Shift + F10 时出现的 运行 配置列表,我希望在用户按住 Shift 时执行不同的操作(或操作的变体),同时选择动作。

遗憾的是,documentation nor the code examples 都无法帮助我。我也没能找到上述 运行 配置操作组的源代码。

当然,我已经尝试了显而易见的解决方案:

虽然第一个解决方案在菜单中 单击 操作时有效,但在使用 Shift + Enter 选择它时无效。事实上,我什至无法捕获任何关键事件,因为它们似乎被速度搜索捕获了。

如何根据修改键更改操作组的行为?

感谢 Meo 我找到了答案。

我使用以下代码来创建包含操作列表的弹出窗口:

final ListPopup popup = JBPopupFactory.getInstance()
        .createActionGroupPopup(...); // some parameters here

通过将该代码更改为以下代码,按 Shift + Enter 将 select 当前突出显示的选项并将正确的修饰符传递给操作的 actionPerformed 方法:

final ListPopupImpl popup = (ListPopupImpl) JBPopupFactory.getInstance()
        .createActionGroupPopup(...); // some parameters here

popup.registerAction("invokeAction", KeyStroke.getKeyStroke("shift ENTER"),
        new AbstractAction() {
            @Override
            public void actionPerformed(final ActionEvent event) {
                final KeyEvent keyEvent
                        = new KeyEvent(popup.getComponent(), event.getID(),
                                       event.getWhen(), event.getModifiers(),
                                       KeyEvent.VK_ENTER, KeyEvent.CHAR_UNDEFINED,
                                       KeyEvent.KEY_LOCATION_UNKNOWN);
                popup.handleSelect(true, keyEvent);
            }
        });

此外,根据是否按住该键更改菜单标题:

popup.registerAction("shiftReleased", KeyStroke.getKeyStroke("released SHIFT"), new AbstractAction() {
    public void actionPerformed(final ActionEvent event) {
        popup.setCaption("Normal title");
    }
});
popup.registerAction("shiftPressed", KeyStroke.getKeyStroke("shift pressed SHIFT"), new AbstractAction() {
    public void actionPerformed(final ActionEvent event) {
        popup.setCaption("Shift is pressed title");
    }
});