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

  • 相关阅读:
    让DIV实现抖动效果!
    Linux下如果python2和python3同时存在使用pip3
    Eclipse 查找一个接口的具体实现
    linux下编译安装软件到指定目录
    NG机器学习-octave基本操作
    NG机器学习
    全注解方式构建SpringMVC项目
    Java多线程学习开发笔记
    RabbitMQ 学习开发笔记
    Redis 学习开发笔记
  • 原文地址:https://www.cnblogs.com/vipbooks/p/5905856.html
Copyright © 2020-2023  润新知