1

我会自动生成一组 JMenuItem 并将它们添加到每个右键单击事件的 JPopUpMenu 中。问题是当我在所选菜单上按回车键时,我为菜单项设置的操作没有运行。我可以使用向上/向下键在菜单上导航,但是,该操作只能通过鼠标单击来运行。

这是创建菜单项的代码:

private JMenuItem createMenuItem(TaskFactory tf, String title, boolean useCheckBoxMenuItem, String toolTipText) {

    enter code hereJMenuItem item;
    PopupAction action = new PopupAction(tf, title);
    if ( useCheckBoxMenuItem )
        item = new JCheckBoxMenuItem(action);
    else
        item = new JMenuItem(action);
    item.setEnabled(tf.isReady());
    item.setToolTipText(toolTipText);
    return item;
}

private class PopupAction extends AbstractAction {

    TaskFactory tf;
    PopupAction(TaskFactory tf, String title) {
        super( title );
        this.tf = tf;
    }
    public void actionPerformed(ActionEvent ae) {
        m_view.manager.execute(tf.createTaskIterator());
    }
}

我试过将focusable设置为true,但这没有用。我已经在 Mac 10.7、Java 版本 1.6.0_33 和 Ubuntu Java 版本 1.6.0_26 上进行了尝试。我使用了标准的挥杆外观。在 Mac 上运行时:外观是[Mac OS X 的 Aqua 外观 - com.apple.laf.AquaLookAndFeel]

4

4 回答 4

2
于 2012-06-22T20:19:29.100 回答
1

AFAIK,这就是外观的工作方式。可以通过按空格键单击按钮和菜单项。Enter 用于单击默认按钮。

于 2012-06-22T19:19:26.200 回答
1

ImageApp似乎Action适用于添加到菜单栏的项目和通过添加到上下文菜单的项目setComponentPopupMenu()。要么 要么EnterSpace菜单栏或上下文菜单中唤起选定的菜单项。

顺便说一句,请注意getMenuShortcutKeyMask()用作跨平台MASK.

于 2012-06-23T02:45:11.603 回答
0

You need to add a KeyListener to your JMenuItem, and set the item as focusable. Have your JMenuItem requesting focus with

JMenuItem.requestFocus();

When it has focus, the implemtation is easy

In your keylistener:

        @Override
        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == e.VK_ENTER) {
                // do stuff
            }

        }
于 2012-06-22T20:20:17.720 回答