我做了一个jframe窗口,里面有jtable,jlist等各类组件,jtable里面因为要编辑一些东西,所以设了ctrl+s等快捷键来保存修改。但我设到jframe的getContentPane不好用:public void concreteShortcut(String key,Action action){
        JPanel panel = (JPanel) this.getContentPane();
        InputMap imap= panel.getInputMap();
        ActionMap amap=panel.getActionMap();
        String mapKey = new Random().nextInt()+"";
        imap.put(KeyStroke.getKeyStroke(key),mapKey);
        amap.put(mapKey,action);
    }这个窗口没有把所有的组件放到一个新new的JPanel,然后再getContentPane.add(panel),而是直接getContentPane().add各种组件,难道和这个有关系?我看了核心技术里的例子,他是把新创建的一个jpanel(里面放置各种组件)添加到contentpane里。越用越感觉swing难用。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【fxbird】截止到2008-07-09 09:41:24的历史汇总数据(不包括此帖):
    发帖的总数量:125                      发帖的总分数:3968                     每贴平均分数:31                       
    回帖的总数量:1028                     得分贴总数量:285                      回帖的得分率:27%                      
    结贴的总数量:116                      结贴的总分数:3758                     
    无满意结贴数:10                       无满意结贴分:380                      
    未结的帖子数:9                        未结的总分数:210                      
    结贴的百分比:92.80 %               结分的百分比:94.71 %                  
    无满意结贴率:8.62  %               无满意结分率:10.11 %                  
    值得尊敬
      

  2.   

    响应的时候要获得焦点        this.getContentPane().setFocusable(true);
            this.getContentPane().requestFocus();
      

  3.   

    什么时候让 this.getContentPane()获得焦点?
      

  4.   


        /**
         * 为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);
      

  5.   

    swing真他妈难用。加个快捷键都这么费事。
      

  6.   

    怎么才能像jbuilder那样,无论焦点在哪,按F1就会出现帮助。
      

  7.   

    什么叫没获得焦点?对jframe的rootpane根本就没用。我现在只能把每个组件都加一遍,但jtable不知怎么加,当编辑某个单元格的时候,还要先获得celleditor,再加快捷键,这个没做,太他妈麻烦了。你没用过几次吧,不是你想得那么简单。
      

  8.   

    你按下alt+你的key看看行不行的
      

  9.   

    设置当前模型上的键盘助记符。助记符是某种键,它与外观的无鼠标修饰符(通常是 Alt)组合时(如果焦点包含在此按钮祖先窗口中的某个地方)将激活此按钮。 
    一个助记符必须对应键盘上的一个键,并且应该使用 java.awt.event.KeyEvent 中定义的 VK_XXX 键代码之一指定。助记符是不区分大小写的,所以具有相应键代码的键事件将造成按钮被激活,不管是否按下 Shift 修饰符。 如果在按钮的标签字符串中发现由助记符定义的字符,则第一个出现的助记符将是带下划线的,以向用户指示该助记符。
    api里的
      

  10.   

    好用,可能我上次getInputMap时没有指定参数。