//建立一个类扩展AbstractAction public class ColorAction extends AbstractAction { public ColorAction(String name, Color c) { putValue(Action.NAME, name); putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase()); putValue("color", c); } public void actionPerformed(ActionEvent event) { Color c = (Color) getValue("color"); setBackground(c); } } }
import java.awt.event.*;
import javax.swing.*;public class Test
{
public static void main(String[] args)
{
TestFrame frame = new TestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class TestFrame extends JFrame
{
public TestFrame()
{
setSize(300,200);
TestPane panel = new TestPane();
add(panel);
}
}class TestPane extends JPanel
{
public TestPane()
{
//创建自己定义的动作类的对象
Action yellowAction = new ColorAction("Yellow", Color.YELLOW);
Action blueAction = new ColorAction("Blue", Color.BLUE);
Action redAction = new ColorAction("Red", Color.RED);
//构造JButton,很方便,因为JButton有专门的构造器接受动作对象
add(new JButton(yellowAction));
add(new JButton(blueAction));
add(new JButton(redAction));
//定位顶层组件,并得到WHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射
InputMap imap = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
//为需要的击键创建KeyStroke对象,并用字符串描述动作
imap.put(KeyStroke.getKeyStroke("typed y"), "panel.yellow");
//还可以这样写,如果是ALT组合件0就改成InputEvent.ALT_MASK
//imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, 0), "panel.yellow");
imap.put(KeyStroke.getKeyStroke("typed b"), "panel.blue");
imap.put(KeyStroke.getKeyStroke("typed r"), "panel.red");
//得到顶层组件的动作映射并把动作键和动作对象添加进该映射
ActionMap amap = getActionMap();
amap.put("panel.yellow", yellowAction);
amap.put("panel.blue", blueAction);
amap.put("panel.red", redAction);
}
//建立一个类扩展AbstractAction
public class ColorAction extends AbstractAction
{
public ColorAction(String name, Color c)
{
putValue(Action.NAME, name);
putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase());
putValue("color", c);
} public void actionPerformed(ActionEvent event)
{
Color c = (Color) getValue("color");
setBackground(c);
}
}
}
所以搂主可以用我上面的建立动作对象的方法。
调用 setMnemonic(char mnemonic) 方法。
jMenuFile.setMnemonic('f'); jMenuHelp.setMnemonic('h');jMenuHelpAbout.setMnemonic('a');