2012-04-25 2 views
1

Я работаю, чтобы показать все файлы и папки FTP-сервера в JTree. Но у меня возникла проблема, когда пустые папки отображаются в виде файла. Но как показать их как значок папки?Как изменить значок пустой папки в JTree? (Файл FTP)

Вот мой код:

public void buildTree(){ 

    try { 
     ftpClient.connect("130.229.178.31");    
     ftpClient.login("admin", "123456"); 

     root = new DefaultMutableTreeNode("Welcome!");   
     for (int i = 0; i < 1; i++) { 
      DefaultMutableTreeNode temp = new DefaultMutableTreeNode("FTP-Server"); 
      root.add(temp); 
      bind(temp,""); 
     } 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
     throw new RuntimeException("Client Error", e1); 
    } 
    try { 
      ftpClient.disconnect(); 
    } catch (IOException e2) { 
      e2.printStackTrace(); 
      throw new RuntimeException("Error when shutdown", e2); 
    } 
} 

// bind nod/subnode to the tree (recursive method) 
public void bind(DefaultMutableTreeNode node,String path){ 
    try { 

     Boolean defaultPath = true; 
     while (defaultPath) 
     { 
      defaultPath = ftpClient.changeToParentDirectory(); 
     } 

     ftpClient.changeWorkingDirectory(path); 

     FTPFile[] files = ftpClient.listFiles(); 


     for(int i=0;files!=null && i<files.length;i++){ 
      FTPFile tempFile = files[i]; 
      if(tempFile.isDirectory()){ 




       DefaultMutableTreeNode tempNode = new DefaultMutableTreeNode(tempFile.getName()); 
       node.add(tempNode); 


       bind(tempNode, path+"/"+tempFile.getName()); 
      }else{ 
       DefaultMutableTreeNode tempNode = new DefaultMutableTreeNode(tempFile.getName()); 
       node.add(tempNode); 
      } 
     } 


    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

FTP JTree

"грустная" папка является пустой папкой, но отображается в виде значка файла. Как его изменить?

Большое спасибо

PS: же методов не работает, как

FileSystemView fileSystemView = FileSystemView.getFileSystemView(); 
setIcont(fileSystemView.getSystemIcon(File file)); 

Поскольку мы работаем с FTP файлы не с файлами.

+1

-1 для вашего названия – Kai

ответ

1

У вас есть два варианта:

  • добавить "пустой файл" в пустую папку (возможно, называют его "[пустые]") или
  • Используйте свой собственный DefaultTreeCellRenderer

I подумайте, что вторая койка предпочтительнее. Я также рекомендую использовать собственный TreeModel, чтобы указать, является ли узел дерева файлом или папкой.

Смежные вопросы