1

JMenuItemのセットを自動的に生成し、右クリックイベントごとにJPopUpMenuに追加します。問題は、選択したメニューでEnterキーを押しても、メニュー項目に設定したアクションが実行されないことです。上/下キーを使用してメニューをナビゲートできますが、アクションはマウスクリックでのみ実行されます。

メニュー項目を作成するためのコードは次のとおりです。

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());
    }
}

フォーカス可能をtrueに設定しようとしましたが、うまくいきませんでした。Mac 10.7、Javaバージョン1.6.0_33、UbuntuJavaバージョン1.6.0_26で試してみました。標準のスイングル​​ックアンドフィールを使用しました。Macで実行している場合:ルックアンドフィールは[MacOSXのアクアルックアンドフィール-com.apple.laf.AquaLookAndFeel]

4

4 に答える 4

2
于 2012-06-22T20:19:29.100 に答える
1

私の知る限り、それがルックアンドフィールの仕組みです。スペースバーを押すと、ボタンとメニュー項目をクリックできます。Enter は、デフォルトのボタンをクリックするためのものです。

于 2012-06-22T19:19:26.200 に答える
1

これは、メニュー バーに追加された項目と を介してコンテキスト メニューに追加された項目の両方ImageAppを使用して正しく動作するようです。メニューバーまたはコンテキスト メニューから選択したメニュー項目を呼び出します。ActionsetComponentPopupMenu()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 に答える