Java快捷鍵制作
用過(guò)VB的知道按下F5是運(yùn)行窗體,用過(guò)Photoshop的知道按下Tab是隱藏所有面板,你的Java程序也想有這個(gè)功能么?那么希望這篇文章對(duì)您有所幫助。
子菜單類(lèi)JMenuItem有一個(gè)方法不知道你注意過(guò)沒(méi)有:setAccelerator。
打開(kāi)幫助文件對(duì)這個(gè)方法的描述是: 設(shè)置組合鍵,它能直接調(diào)用菜單項(xiàng)的操作偵聽(tīng)器而不必顯示菜單的層次結(jié)構(gòu)。所以用這個(gè)方法就能制作我們所要的快捷鍵了。
幫助文件告訴我們,傳給setAccelerator方法所要的是一個(gè)KeyStroke,下面來(lái)說(shuō)說(shuō)這個(gè)類(lèi):
KeyStoke在Javax.swing包下,他的作用將我們要的鍵"捆"起來(lái),再傳給上面所說(shuō)的setAccelerator之類(lèi)的方法來(lái)使用,KeyStoke類(lèi)提供了幾個(gè)"捆"鍵的靜態(tài)重載方法,下面說(shuō)幾個(gè)例子,你們自己去試試吧:
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);
當(dāng)然,如果你不想引入一些如KeyEvent或InputEvent類(lèi)的話(huà),那么你就可以用KeyStroke.getKeyStroke(String s)方法來(lái)簡(jiǎn)化他:
F5:KeyStroke.getKeyStroke("F5");
Ctrl+Q:KeyStroke.getKeyStroke("control Q ");
a:KeyStroke.getKeyStroke( "typed a" );
Alt+Shift+C:getKeyStroke("alt shift released X ");
如為子菜單"打開(kāi)"(名為:meuOpen)加入快捷鍵Ctrl+O:
meuOpen.setAccelerator(KeyStroke.getKeyStroke("control O"));
上面說(shuō)的是子菜單的快捷鍵設(shè)置,現(xiàn)在說(shuō)下其它控件的快捷鍵設(shè)置:
把開(kāi)幫助文件,進(jìn)入 javax.swing.AbstractButton ,你可以找到setMnemonic (int mnemonic),這就是AbstractButton子類(lèi)設(shè)置快捷鍵的方法了,如一個(gè)按鈕btn,設(shè)置快捷鍵為:btn.setMnemonic (KeyEvent.A),則它的快捷方式為Alt+A,它有一個(gè)修飾方法 setDisplayedMnemonicIndex (int index),作用是設(shè)置標(biāo)題的第幾個(gè)字符加個(gè)下劃線(xiàn)來(lái)標(biāo)識(shí)快捷鍵,如btn.setText("Open");btn.setDisplayedMnemonicIndex(0),則btn的標(biāo)題變?yōu)?span style="text-decoration: underline">Open。
聰明的你們突類(lèi)旁通吧,一定可以成功的。不過(guò)要注意以下幾點(diǎn):
1、在使用KeyStroke的getKeyStroke(String s)方法時(shí)應(yīng)該注意用法如Ctrl用control表示,Alt用alt來(lái)表示,如果加上字母則要用大寫(xiě),但只有一個(gè)鍵如a時(shí),應(yīng)該用小寫(xiě):"type a"。
2、KeyStroke的getKeyStroke(String s)方法是方便,但如果使用不合法的語(yǔ)法是達(dá)不到目的的,這時(shí)你可以試試KeyStroke的其它靜態(tài)方法。
3、AbstractButton的子類(lèi)的快捷鍵用setMnemonic方法來(lái)設(shè)置只能有Alt+指定的鍵。
</script>