java 制作快捷键_Java快捷键制作

Java快捷键制作

用过VB的知道按下F5是运行窗体,用过Photoshop的知道按下Tab是隐藏所有面板

,你的Java程序也想有这个功能么?那么希望这篇文章对您有所帮助。

子菜单类JMenuItem有一个方法不知道你注意过没有:setAccelerator。

打开帮助文件对这个方法的描述是: 设置组合键,它能直接调用菜单项的操作

侦听器而不必显示菜单的层次结构。所以用这个方法就能制作我们所要的快捷键

了。

帮助文件告诉我们,传给setAccelerator方法所要的是一个KeyStroke,下面来

说说这个类:

KeyStoke在Javax.swing包下,他的作用将我们要的键"捆"起来,再传给上面所

说的setAccelerator之类的方法来使用,KeyStoke类提供了几个"捆"键的静态重

载方法,下面说几个例子,你们自己去试试吧:

F5: KeyStroke.getKeyStroke(KeyEvent.F5, 0);

Ctrl+Q: KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK);

a:KeyStroke. getKeyStroke('a');

Alt+Shift+C:getKeyStroke(KeyEvent.VK_C, InputEvent.ALT_MASK |

InputEvent.SHIFT_MASK, true);

当然,如果你不想引入一些如KeyEvent或InputEvent类的话,那么你就可以用

KeyStroke.getKeyStroke(String s)方法来简化他:

F5:KeyStroke.getKeyStroke("F5");

Ctrl+Q:KeyStroke.getKeyStroke("control Q ");

a:KeyStroke.getKeyStroke( "typed a" );

Alt+Shift+C:getKeyStroke("alt shift released X ");

如为子菜单"打开"(名为:meuOpen)加入快捷键Ctrl+O:

meuOpen.setAccelerator(KeyStroke.getKeyStroke("control O"));

上面说的是子菜单的快捷键设置,现在说下其它控件的快捷键设置:

把开帮助文件,进入 javax.swing.AbstractButton ,你可以找到setMnemonic

(int mnemonic),这就是AbstractButton子类设置快捷键的方法了,如一个按钮

btn,设置快捷键为:btn.setMnemonic (KeyEvent.A),则它的快捷方式为Alt+A

,它有一个修饰方法 setDisplayedMnemonicIndex (int index),作用是设置标

题的第几个字符加个下划线来标识快捷键,如btn.setText

("Open");btn.setDisplayedMnemonicIndex(0),则btn的标题变为Open。

聪明的你们突类旁通吧,一定可以成功的。不过要注意以下几点:

1、在使用KeyStroke的getKeyStroke(String s)方法时应该注意用法如Ctrl用

control表示,Alt用alt来表示,如果加上字母则要用大写,但只有一个键如a时

,应该用小写:"type a"。

2、KeyStroke的getKeyStroke(String s)方法是方便,但如果使用不合法的语法

是达不到目的的,这时你可以试试KeyStroke的其它静态方法。

3、AbstractButton的子类的快捷键用setMnemonic方法来设置只能有Alt+指定的

键。

button不能设置alt以外的快捷键,menuitem可以:

menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,

InputEvent.CTRL_MASK));

JMenu jm = new JMenu("文件(F)");

jm.setMnemonic('f');

ActionListener   action=new   ActionListener(){

public   void   actionPerformed(ActionEvent   e){

System.out.println("^G   has   pressed.");

}

};

KeyStroke   ks=KeyStroke.getKeyStroke

(KeyEvent.VK_G,InputEvent.CTRL_MASK,false);//Ctrl+G

InputMap   map     =   jButton4.getInputMap

(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

map.put(ks,"key");//这个"key"可以是任意字符串,但是不能重复,就好像

是Hashtable中的ke -value一样,

而下面actionmap中put进去的action就是它的value;

jButton4.getActionMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)

.put("key",action);

/**

* 为RootPaneContainer组件添加键盘事件

* @param rpc RootPaneContainer组件

* @param action 需要执行的动作

* @param keyName 键的名称

* @param keyCode 键的数字代码

* @param modifiers 任意修饰符的按位或组合

*/

public static void registerKeyEvent(RootPaneContainer rpc, Action

action, String keyName, int keyCode, int modifiers)

{

JRootPane rp = rpc.getRootPane();

InputMap inputMap = rp.getInputMap

(JComponent.WHEN_IN_FOCUSED_WINDOW);

inputMap.put(KeyStroke.getKeyStroke(keyCode, modifiers),

keyName);

rp.getActionMap().put(keyName, action);

}

Action action = new AbstractAction()

{

public void actionPerformed(ActionEvent e)

{

System.out.println("Do something...");

}

};

registerKeyEvent(jframe, action, "随便什么都行,只要不重复",

KeyEvent.VK_S, KeyEvent.CTRL_MASK);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值