2017-05-23 1 views
0

J'ai eu de la difficulté à monter un arbre et à le lancer pour obtenir un résultat comme ci-dessous.Arbres et tableaux

enter image description here

Je suis donc censé créer un arbre avec des racines et des enfants par un fichier .txt.

Ceci est le code, et je vais donner une brève explication ci-dessous.

public class Tree extends TreeFrame{ 

    Tree() throws FileNotFoundException { 
     super(); 
    } 

    private static final long serialVersionUID = 1L;  
    DefaultTreeModel model; 
    Nod nod; 
    static Tree main; 
    static String filen =""; 

    public void initTree() throws FileNotFoundException{ 

     filen = "C:/Users/MyComp/workspace/Lab5/src/Lab5/Life.txt";   
     @SuppressWarnings("resource") 
     Scanner sc = new Scanner(new File(filen));        
     sc.nextLine();               
     ArrayList<DefaultMutableTreeNode> ar = null; 

     while (sc.hasNextLine()){ 
      String sc2 = sc.nextLine().replace("<", ""); 
      char chr = '/'; 

      if (sc2.charAt(0) != chr){ 
       String[] parts = sc2.split(" "); 
       String[] parts2 = parts[1].split("=\""); 
       String[] parts3 = sc2.split(">"); 
       nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]); 
       ar = new ArrayList<DefaultMutableTreeNode>();   

       for (int i = 0; i < nod.getDepth(); i++){ 
        ar.add(nod);             
       } 
      } 

     buildTree(ar);               
     } 
    } 

    void buildTree(ArrayList<DefaultMutableTreeNode> a){  

      model = new DefaultTreeModel (a);  
      tree = new JTree(model);        
      tree.setBackground(Color.green);      
    } 


    void showDetails(TreePath path){ 
     if (path == null) 
     return; 

     int a = path.getPathCount()-1; 
     DefaultMutableTreeNode b = (DefaultMutableTreeNode) path.getPathComponent(a); 
     String info = ((Nod) b).getText(); 
     JOptionPane.showMessageDialog(this, info); 
    } 


    public static void main(String[] args) throws FileNotFoundException{ 
     if(args.length>0){ 
      filen=args[0]; 
     } 

     main = new Tree();         
    } 
} 

Nod est juste la classe qui rend les objets avec le nom, le niveau et le texte. Donc la pensée principale était de, importer le fichier -> le lire -> en faire des objets -> créer un tableau et y ajouter les "noeuds"/objets -> faire un TreeModel par le tableau/"noeuds" -> créer un arbre par le TreeModel (comme vous voyez) -> et juste l'exécuter avec l'extension pour obtenir l'interface graphique. Mais j'obtiens une erreur de syntaxe sur ArrayList<DefaultMutableTreeNode>.

Voyez-vous le problème?

+0

** Toujours ** poster le message d'erreur complet avec votre question. Vous voulez que la question soit aussi facile à répondre que possible, non? –

+0

Notez que vous recréez l'arrayliste à chaque itération d'une boucle, ce qui n'a aucun sens. Créez l'arrayliste depuis le début et utilisez-le, mais n'en continuez pas à en créer un. –

+0

Je voulais juste ajouter tous les objets dans le même tableau, mais oui je pense que c'est quelque chose qui ne va pas avec cette boucle. – Alwe17

Répondre

1

Le problème immédiat est qu'aucun constructeur DefaultTreeModel n'accepte un ArrayList en tant qu'argument. Voir les documents here.

Je pense que vous pourriez avoir besoin de lire ce tutorial sur la façon d'utiliser JTree.

0

Vous devez modifier cette clause si:

if (sc2.charAt(0) != chr){ String[] parts = sc2.split(" "); 
String[] parts2 = parts[1].split("=\""); 
String[] parts3 = sc2.split(">"); 
nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]); 
// ar = new ArrayList<DefaultMutableTreeNode>(); 
for (int i = 0; i < nod.getDepth(); i++){ ar.add(nod); } }