Avatar billede tommer Nybegynder
30. oktober 2002 - 12:36 Der er 5 kommentarer og
1 løsning

JTree

jeg roder med et JTree der arbejder ud fra en sti til en aktuel fil.
men det virker ikke helt...
kan man få lidt hjælp ?
min kode:

import javax.swing.*;
import javax.swing.tree.*;
import java.io.*;
import java.util.*;

public class STTreeFrame {
private DefaultMutableTreeNode top;
private DefaultMutableTreeNode p1;
    public STTreeFrame() {
      JFrame frame = new JFrame("Tree example");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      MutableTreeNode top = createTree();
      JTree tree = new JTree(top);
      tree.setRootVisible(true);
      tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
      frame.getContentPane().add(new JScrollPane(tree));
      frame.pack();
      frame.setVisible(true);
    }
   
    private MutableTreeNode createTree() {
       
      try{
        File dir = new File("C:/filer");
        StringBuffer buffer = new StringBuffer();
        String[] files = dir.list();
        List list = Arrays.asList(files);
        files = (String[])list.toArray(new String[0]);
        top = new DefaultMutableTreeNode(dir.getCanonicalPath());
          for(int i=0; i<files.length; i++){
            File file = new File(dir,files[i]);
           
            if(file.isDirectory()){
                //en ny mappe her
                p1 = new DefaultMutableTreeNode(file.getName());
                top.add(p1);
                String[] files1 = file.list();
                List list1 = Arrays.asList(files1);
                files1 = (String[])list1.toArray(new String[0]);
                for(int j=0; j<files1.length; j++){
                DefaultMutableTreeNode p2 = new DefaultMutableTreeNode(files1[j]);
              p1.add(p2);
            }//slut for
            }//slut if
           
            else{
              DefaultMutableTreeNode p1 = new DefaultMutableTreeNode(files[i]);
              top.add(p1);
            }//slut else
            }//slut for
        }//slut try
        catch (IOException e) {
        e.printStackTrace();
        }
     
      return top;
    }

    public static void main (String args[]) {
        new STTreeFrame();
    }

}
Avatar billede dittmer Nybegynder
30. oktober 2002 - 22:21 #1
Kunne du ikke være mere specifik end "virker ikke helt"?
Avatar billede tommer Nybegynder
30. oktober 2002 - 22:25 #2
ku kunne jo prøve at køre det..  men det går galt med mapper inde i mapper hvis du forstår. dvs i if(file.isDirectory())
Avatar billede anadan Nybegynder
31. oktober 2002 - 10:37 #3
du burde overveje at bruge rekursion:

public void createTree(File dir, DefaultMutableTreeNode node){       
File[] files = dir.listFiles();
for (int i=0; i<files.length; i++) {
  if(files[i].isDirectory()){
  DefaultMutableTreeNode me = new DefaultMutableTreeNode(files[i].getName().toUpperCase());
  node.add(me);       
  createTree(files[i], me);               
  }
  else{
  //gør noget med en fil der ikke er directory
  }
}   

mvh anadan
Avatar billede anadan Nybegynder
31. oktober 2002 - 10:38 #4
(sorry det var et svar...)
du burde overveje at bruge rekursion:

public void createTree(File dir, DefaultMutableTreeNode node){       
File[] files = dir.listFiles();
for (int i=0; i<files.length; i++) {
  if(files[i].isDirectory()){
  DefaultMutableTreeNode me = new DefaultMutableTreeNode(files[i].getName().toUpperCase());
  node.add(me);       
  createTree(files[i], me);               
  }
  else{
  //gør noget med en fil der ikke er directory
  }
}   

mvh anadan
Avatar billede tommer Nybegynder
31. oktober 2002 - 10:39 #5
du har nok ret, jeg er kommet frem til det samme...
du har scoret ;-)
tommer
Avatar billede anadan Nybegynder
31. oktober 2002 - 10:49 #6
thanks..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester