多くのクラスを共有する 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 呼び出しをアクション クラス内に移動しようとしています。
これを行う方法はありますか?