Faire une arborescence d'une arraylist triée

Résolu/Fermé
Killdragon - 9 déc. 2012 à 12:37
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 9 déc. 2012 à 16:05
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

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
9 déc. 2012 à 16:05
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
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
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