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

猜你喜欢

转载自blog.csdn.net/vipbooks/article/details/5199186
今日推荐