如何为Action中的键设置加速器?

时间:2013-08-22 19:53:49

标签: java swing jmenu

我正在尝试将我的大多数菜单整合到两个共享很多类的类似应用程序中。部分原因是我试图将任何我可以采取行动。我遇到的问题是我想要菜单项的相同加速器。有没有办法在动作中设置它,这样我就不必复制我的代码来设置加速器了?

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调用移到我的操作类中。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

对于加速键而言,有一个值就像简短描述一样,对于你的情况,这样就像这样写:

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

如果您使用Eclipse作为IDE,它应该在键入putValue并点击自动完成快捷方式时告诉您可用的键。