项目中需要在任何地方监听ctrl+v时间,而不是仅仅在menu中,是不是只能用keyListener,在keyListener中怎么监听组合键??-------------------------------------------------------------
            Quietly through  .....

解决方案 »

  1.   


        /**
         * 为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);
        }
    用法
    registerKeyEvent(jframe, action, "随便什么都行,只要不重复", KeyEvent.VK_V, KeyEvent.CTRL_MASK);
      

  2.   

    //我是这么写的,不知道行不?public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if( e.getKeyText(e.getKeyCode()).toLowerCase().equals("ctrl")){
    _isCtrl = true ;
    }else{
    if( _isCtrl){
    //judge Ctrl+ v
    if(e.getKeyText(e.getKeyCode()).toUpperCase().equals("V") ){
    pasteDevices();
    }
    // judge Ctrl + x
    if(e.getKeyText(e.getKeyCode()).toUpperCase().equals("X")){
    cutDevices();
    }
    _isCtrl = false;
    }
    }
    }
    -------------------------------------------------------------
                Quietly through  .....
      

  3.   

    还有就是你那种方法的响应事件怎么写??-------------------------------------------------------------
                Quietly through  .....
      

  4.   

    添加KeyListener的话应该这样写
                    if(e.getModifiers() == KeyEvent.CTRL_MASK && e.getKeyCode() == 'C')
                    {
                        
                    }
    不过KeyListener只保证控件获得焦点的时候才响应,我上边帖的那个实现方法只要窗口处于激活状态,不管焦点在哪个控件上都会响应的不好意思,刚才忘了帖action,就是你说的响应实现
            Action action = new AbstractAction()
            {
                private static final long serialVersionUID = 3322001448168076177L;            public void actionPerformed(ActionEvent e)
                {
                    System.out.println("Do something...");
                }
            };
      

  5.   

    cancelBtn.registerKeyboardAction(cancelBtn.getActionListeners()[0],KeyStroke.getKeyStroke("control C"),JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);第一个是响应的事件