希望屏蔽FileChooser 中的Home 、向上一层、以及双击文件夹消息,重写相应的ActionPerformed处理
默认时点击Home 直接回到用户的Home 目录去了,
双击文件夹时默认就进入子文件夹了,请问如何截获相应的消息?
同时以详细列表显示时,点击文件名时如何进行排序(截获点击列名事件),盼高手指点

解决方案 »

  1.   

    主要是看中了JFileChooser 自带的多列详细列表功能,希望在此基础上改进
      

  2.   

    看了看源代码,JFileChooser做得很烂,Home按钮0 、向上一层按钮都不是属性!
    是在initAllComponent()时定义并加载的.呵呵.有些难度
      

  3.   

    解决了屏蔽New Folder、向上一层的事件,Home无效,解决了自定义双击事件,现将代码分享,希望对大家有用。
    //以下屏蔽New Folder、向上一层的事件,Home无效(java version 1.4以上)
     final  BasicFileChooserUI basicUI=(BasicFileChooserUI)(jFileChooser.getUI());
          //  System.out.println(basicUI.getDialogTitle(this.jFileChooser));
            basicUI.getChangeToParentDirectoryAction().setEnabled(false);
            basicUI.getGoHomeAction().setEnabled(false);
            basicUI.getNewFolderAction().setEnabled(false);
            jFileChooser.addPropertyChangeListener(new PropertyChangeListener() {
         public void propertyChange(PropertyChangeEvent ev) {
             if (ev.getPropertyName() == JFileChooser.DIRECTORY_CHANGED_PROPERTY) {
              // System.out.println(basicUI.getGoHomeAction().isEnabled());
         SwingUtilities.invokeLater(new Runnable() {
             public void run() {
               basicUI.getNewFolderAction().setEnabled(false);
               basicUI.getGoHomeAction().setEnabled(false);
               basicUI.getChangeToParentDirectoryAction().setEnabled(false);
             }
         });
             }
         }
             });
    //以下重载双击事件,首先查找JList Component,然后删除原有MouseListener,添加自己的MouseListener
     public static JList searchJList(Container fileChooser)   
        {
              JList ret = null;      // First check, wether i am a JList:     
               if (fileChooser instanceof JList)
               {     
                    ret = (JList)fileChooser;   
                       }      // Ok, me not: let's ask the children.      
               else {  
                      Component[] children = fileChooser.getComponents(); 
                     for(int i=children.length-1;i>=0;i--) 
                     {
                       if (children[i] instanceof Container) 
                       {         
                             ret = searchJList((Container)children[i]);
                              if(ret != null) 
                              {  break;               } 
                        }  
                      } 
                    } 
                    return ret;
            }    //查找JFileList 里的JList component        JList list = searchJList(jFileChooser);
         if (list!=null) 
         {     
              String listenerClassName;  
              MouseListener[] listeners = list.getMouseListeners(); 
              for (int i=0;i< listeners.length;i++) 
              { 
                listenerClassName = listeners[i].getClass().getName();  
              
             if (listenerClassName.endsWith("FileChooserUI$SingleClickListener")) {
         list.removeMouseListener(listeners[i]);
         break;
             }
             else if(listenerClassName.indexOf("SingleClick")!= -1) 
                {       
                           list.removeMouseListener(listeners[i]);
                        //    System.out.println("remove");
                            break;           
                 } 
              
             else if(listenerClassName.indexOf("DoubleClick")!= -1) 
                {       
                    list.removeMouseListener(listeners[i]);
                     
                     list.addMouseListener(new MouseListener()
                     {
                          public void mouseClicked(MouseEvent e)
                          {
                             if(e.getClickCount()==2)
                             {
                              //Do you want to do,here
                             
                             }

                            }
                           public void mouseEntered(MouseEvent e)
                           {       }
                               
                           public  void mouseExited(MouseEvent e) 
                          { }
                              
                  public  void mousePressed(MouseEvent e)
                      {
                       
                      }
                 public  void mouseReleased(MouseEvent e) 
                      {
                       
                      }
                                   });
                            break;           
                 } 
              } 
           
           }