JMenu +多种组合快捷键+图片

        最近用到了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了

你可能感兴趣的:(swing,互联网,sun)