Faire une arborescence d'une arraylist triée

Résolu
Killdragon -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

je dispose d'une arraylist qui répertorie donc tous les fichiers de type .pdf et qui les trie suivant une méthode au choix (soit par taille, soit par nom, soit par date) mais ce que je voudrais c'est faire deux choses :

1) Afficher une arborescence qui permette donc de visualiser cette arraylist, c'est a dire une arborescence ne visualisant que les fichiers .pdf triés par l'arraylist (donc les pdf triés par nom, date ou taille) puisque je ne vois pas comment relier les deux

2) Faire cette même arborescence version programme, donc l'afficher sur mon JFrame...

J'admet ne pas trop savoir comment faire le lien logique entre les deux ne sachant déjà de base, pas trop comment se débrouiller avec les arborescences, mais pour ce qui est de l'afficher directement sur le JFrame la je ne vois pas du tout.

Grosso modo je voudrais créer cette arborescence façon console, et façon interface, histoire de laisser le choix a l'utilisateur :)

Bref je ne sais pas si j'ai été assez clair, auquel cas je rajouterais les informations nécessaires, ainsi j'espère donc que vous pourrez m'aider car j'admet ne pas trop savoir comment faire...

PS : Je possède déjà les arraylist triées, une pour chaque tri différent soit au total 3 arraylist :)

Merci d'avance !

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Tout ce que tu essayes de faire, la JTable le fait déjà, tu devrais regarder de ce côté.
    Explications en détails : How To Use Tables

    Voici un exemple de code qui trie les fichiers d'un répertoire (C:\ par exemple)
    Pour changer l'ordre il suffit de cliquer sur l'entête des colonnes.

    import java.awt.BorderLayout;
    
    import java.io.File;
    
    import java.util.Comparator;
    import java.util.Date;
    
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableRowSorter;
    
    public class Fenetre extends JFrame
    {
        private static final long serialVersionUID = 1L;
        
        public Fenetre(File path)
        {
            // Remplissage des données
            
            String[] column = {"Name", "Size", "Date"};
            
            DefaultTableModel model = new DefaultTableModel(column,0);
            
            for (File f : path.listFiles())
                if (f.isFile())
                    model.addRow(new Object[] {f.getName(), f.length(), new Date(f.lastModified())});
            
            // Création des ordres de tri
            
            TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
            
            sorter.setComparator(0, new Comparator<String>()
            {
                public int compare(String fileName1, String fileName2)
                {
                    return fileName1.toLowerCase().compareTo(fileName2.toLowerCase());
                }
            });
            
            sorter.setComparator(1, new Comparator<Long>()
            {
                public int compare(Long fileSize1, Long fileSize2)
                {
                    return fileSize1.compareTo(fileSize2);
                }
            });
            
            sorter.setComparator(2, new Comparator<Date>()
            {
                public int compare(Date fileDate1, Date fileDate2)
                {
                    return fileDate1.compareTo(fileDate2);
                }
            });
            
            // Création de la table
            
            JTable table = new JTable(model);
            table.setEnabled(false);
            table.setRowSorter(sorter);
            
            // Affichage dans la fenêtre
            
            add(table.getTableHeader(), BorderLayout.PAGE_START);
            add(table, BorderLayout.CENTER);
            
            setExtendedState(MAXIMIZED_BOTH);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
        
        public static void main(String[] args)
        {
            new Fenetre(new File("C:/"));
        }
    }
    2
  2. Killdragon
     
    J'ai oublié de préciser que pour le mode console, je sais déjà comment faire pour pouvoir appuyer sur le bouton et ouvrir l'arborescence, c'est juste faire apparaitre le tri de l'arraylist qu'il me manque :)
    0
    1. Killdragon
       
      Pour simplifier la chose, voici le code que je propose,

      public class Fenetre extends JFrame {
          private JPanel container = new JPanel(); // Tout ce qui est contenu a l'intérieur de la fênetre
          private JPanel pan = new JPanel(); // instanciation du Jpanel barre des boutons
          private JButton bouton2 = new JButton("Tritaille"); // Créé le bouton "Tritaille"
          private JButton bouton3 = new JButton("Tridate"); // Créé le bouton "Tridate"
          private JButton bouton4 = new JButton("Trinom"); // Créé le bouton "Trinom"
          
      
          public Fenetre() { 
              this.setTitle("Accueil"); // Nomme la fenêtre "Acceuil"
              Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); // repère la taille de l'écran
              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Permet d'effectuer les actions de réduction/fermeture de la fenêtre
              this.setSize((int) tailleEcran.getWidth(), (int) tailleEcran.getHeight()); // permet de créer la fenêtre a la taille de l'écran
              pan.add(bouton2); // Permet d'ajouter le bouton Tritaille a la fenêtre
              pan.add(bouton3); // Permet d'ajouter le bouton Tridate a la fenêtre
              pan.add(bouton4); // Permet d'ajouter le bouton Trinom a la fenêtre   
              bouton1.addActionListener(new OpenListener1()); // Pour que le bouton effectue l'action quand on clique dessus 
              bouton2.addActionListener(new OpenListener2()); // Pour que le bouton effectue l'action quand on clique dessus
              bouton3.addActionListener(new OpenListener3()); // Pour que le bouton effectue l'action quand on clique dessus
              bouton4.addActionListener(new OpenListener4()); // Pour que le bouton effectue l'action quand on clique dessus     
              container.setBackground(Color.ORANGE); // Définition de sa couleur de fond
              pan.setBackground(Color.RED); // Définition de la couleur de la barre des boutons
              container.setLayout(new BorderLayout()); // Permet de dire a ma fenêtre que les composants doivent se placer comme ça
              container.add(pan, BorderLayout.SOUTH); // Définit l'endroit ou son créés les boutons
              this.setContentPane(container);
              this.setVisible(true);
          	}
      	}
      
      
      /*
      	 * J'avais pensé créer des OpenListener  pour permettre de faire les arborescences pour chaque tri :
      	 * Sauf que ça demande de rajouter des classes, donc une par OpenListener que j'aurais fait de cette façon :
      	 * 
      	 */
          
          
         /* class OpenListener implements ActionListener{
          	public void actionPerformed(ActionEvent arg0) {
          		POUR l'arraylist triée comme on le désire FAIRE : //justement je ne sais pas comment faire comprendre au programme qu'il faut qu'il affiche ce que l'arraylist propose.
          		
          	    JFileChooser SelectFile = new JFileChooser();// Instanciation du choix, on choisit le fichier qu'on veut
          	    if (SelectFile.showOpenDialog(SelectFile) != JFileChooser.APPROVE_OPTION) // si on clique sur annuler
          	        container.updateUI(); // On fait une mise a jour
          	    else // sinon
      			ouvrirFichier(SelectFile.getSelectedFile().getAbsolutePath()); // On fait ce qui est dit dans la fonction ouvrirFichier
          		}
          	}
      	}
          */
      
      Avec la fonction ouvrirFichier ou l'on demandera a l'utilisateur de choisir quel programme ouvrira le fichier pdf, mais ça n'a pas de rapport avec ma question...
      
      
      0