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了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值