-1

ファイル/ディレクトリを含む JTree があります。この JTree の現在のリストを含むリストを取得したいと考えています。

どうすればできますか?

menuItemZip.addActionListener(new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            boolean exist=false;
            File[] files = (File[]) tree.getModel().getRoot();
            for (File file : files) {
                if (file.getName().equals(selectedFile.getName()+".zip"))
                    exist = true;
                break;
            }
            if(exist ==true)
            new ZipWorkers(selectedFile,WORKING,status).execute();
            btnRefresh.doClick();
        }
    });

新しい解決策として編集:それが良い解決策かどうかわかりませんか?

menuItemZip.addActionListener(new AbstractAction() {
        public void actionPerformed(ActionEvent e) {     
           Enumeration enumeration =  ((TreeNode) tree.getModel().getRoot()).children();
            String filename = selectedFile.getName()+".zip";
            boolean exist=false;
            while (enumeration.hasMoreElements()){
                String file = ((File) enumeration.nextElement()).getName();
                   if(file.equals(filename)){
                       exist=true;
                       break;
                   }
            }
         if(exist ==true)
            new ZipWorkers(selectedFile,WORKING,status).execute();
            btnRefresh.doClick();
        }
    });
4

3 に答える 3

3

ディレクトリに再帰的に降りる必要があります (File.isDirectory()そうであるかどうかを確認するには、を参照してください)。再帰性は、ファイルの配列を反復処理し、ディレクトリの子で自分自身を呼び出す関数を作成することで実現できます

boolean doesExist(File[] files, String searchFileName) {
  boolean exists = false;
  for (File f : files) {
    if (f.getName().equals(searchFileName)) {
      exist = true;
    } else if (f.isDirectory()) {
      exist = doesExist(f.listFiles(), searchFileName);
    }
    if (exist) {
      break; // no need to proceed further
    }
  }
  return exist;
}

次に、それを呼び出します

doesExist((File[]) tree.getModel().getRoot(), selectedFile.getName()+".zip");
于 2012-06-22T13:58:11.750 に答える
3

最も簡単な方法は、こちらこちらの素敵な例です

import java.util.Enumeration;   
import javax.swing.JTree;
import javax.swing.tree.TreeNode;

public class Main {
  public static void main(String[] argv) throws Exception {
    JTree tree = new JTree();
    visitAllNodes(tree);
  }
  public static void visitAllNodes(JTree tree) {
    TreeNode root = (TreeNode) tree.getModel().getRoot();
    visitAllNodes(root);
  }

  public static void visitAllNodes(TreeNode node) {
    System.out.println(node);
    if (node.getChildCount() >= 0) {
      for (Enumeration e = node.children(); e.hasMoreElements();) {
        TreeNode n = (TreeNode) e.nextElement();
        visitAllNodes(n);
      }
    }
  }
}
于 2012-06-22T14:03:41.917 に答える
2

ここFileTreeModelで説明する のバリエーションも検討してください。利点は、必要になるまでノードを調べる必要がないことです。

于 2012-06-22T15:23:10.640 に答える