最近用到了JMenu,可是它不能加 3种以上的组合键,虽然有了 setAccelerator这个方法,但是 用了就会抛出异常,让人非常郁闷,把互联网上搜了个遍,没找到,国外论坛有人说这个是SUN的BUG,呵呵,没办法查看了源码,原来:
public void setAccelerator(KeyStroke keystroke)
{
throw new Error("setAccelerator() is not defined for JMenu. Use setMnemonic() instead.");
}
直接抛异常,原来 JMenu 是继承 JMenuItem的,但是SUN为什么要屏蔽这个方法呢 setMnemonic(“填入值”)这个方法只能是ALT+你填入的值,要想做到3个以上的话只能自己动手改写了。
import javax.swing.Action;
import javax.swing.DefaultButtonModel;
import javax.swing.Icon;
import javax.swing.JMenu;
import javax.swing.KeyStroke;
public class MyJMenu extends JMenu{
private KeyStroke accelerator;
private boolean isMouseDragged;
public MyJMenu(String s, Icon icon) {
isMouseDragged = false;
setModel(new DefaultButtonModel());
init(s, icon);
initFocusability();
}
void initFocusability() {
setFocusable(false);
}
public MyJMenu() {
super();
}
public MyJMenu(Action action) {
super(action);
}
public MyJMenu(String s, boolean flag) {
super(s, flag);
}
public MyJMenu(String s) {
super(s);
}
//这里以上的代码 主要是 为了在JMenu上能放个小图片 呵呵
//这里Override
@Override
public void setAccelerator(KeyStroke keystroke) {
KeyStroke keystroke1 = accelerator;
accelerator = keystroke;
repaint();
revalidate();
firePropertyChange("accelerator", keystroke1, accelerator);
}
@Override
public KeyStroke getAccelerator() {
return accelerator;
}
}
这样就ok了