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);

浙公網安備 33010602011771號