0

多くのクラスを共有する 2 つの同様のアプリケーションでほとんどのメニューを統合しようとしています。これの一部は、私ができることは何でも行動に移そうとしていることです. 私が直面している問題は、メニュー項目に同じアクセラレータが必要なことです。アクセラレータを設定するためにコードを複製する必要がないように、アクションでこれを設定する方法はありますか?

package com.protocase.viewer.actions;

import com.protocase.viewer.DesignerApplication;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import static javax.swing.Action.MNEMONIC_KEY;
import static javax.swing.Action.SHORT_DESCRIPTION;


/**
 *
 * @author davidh
 */
public class NewEnclosureAction extends AbstractAction{

    private DesignerApplication app;

    public NewEnclosureAction(DesignerApplication app) {
        super();
        this.app = app;
        putValue(SHORT_DESCRIPTION, "New");
        putValue(AbstractAction.NAME, "New");
        putValue(MNEMONIC_KEY, KeyEvent.VK_N);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
       app.OnNew();
    }

}

..........

    JMenuItem newMit = new JMenuItem(new NewEnclosureAction(this));
    newMit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
    newMit.getAccessibleContext().setAccessibleDescription("New Enclosure from template");
    fileMenu.add(newMit);

..........

setAccelerator 呼び出しをアクション クラス内に移動しようとしています。

これを行う方法はありますか?

4

1 に答える 1

3

簡単な説明のようなアクセラレータ キーの値があります。この場合、次のように記述されます。

    putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));

putValueEclipse を IDE として使用している場合、オートコンプリート ショートカットを入力して押すと、利用可能なキーが表示されます。

于 2013-08-22T20:04:44.220 に答える