7 votes

Démarrer un JFileChooser avec des fichiers classés par date

Une question récente a été posée : Comment puis-je lancer le JFileChooser dans la vue Détails ? et le respuesta a fourni une belle technique pour le faire.

Je voudrais élever l'ambition ici d'un niveau : étant donné que je sais maintenant comment ouvrir le JFileChooser dans la vue détaillée, puis-je également pour qu'il s'ouvre avec les fichiers classés par date ? Je sais que l'utilisateur peut bien sûr cliquer sur les titres, mais y a-t-il un moyen de le faire dans le code ?

7voto

camickr Points 137095

Je ne connais pas d'API pour faire cela. Le code suivant trouve la table utilisée par le sélecteur de fichiers, puis effectue manuellement le tri sur la colonne de date :

JFrame frame = new JFrame();
JFileChooser  fileChooser = new JFileChooser(".");
Action details = fileChooser.getActionMap().get("viewTypeDetails");
details.actionPerformed(null);

//  Find the JTable on the file chooser panel and manually do the sort

JTable table = SwingUtils.getDescendantsOfType(JTable.class, fileChooser).get(0);
table.getRowSorter().toggleSortOrder(3);

fileChooser.showOpenDialog(frame);

Vous aurez aussi besoin de Darryl Swing Utils classe.

Editar:

Apparemment, une certaine logique a été modifiée dans une version ultérieure, comme le suggère un commentaire ci-dessous :

Essayez :

JTable table = SwingUtils.getDescendantsOfType(JTable.class, fileChooser).get(0);
table.getModel().addTableModelListener( new TableModelListener()
{
    @Override
    public void tableChanged(TableModelEvent e)
    {
        table.getModel().removeTableModelListener(this);
        SwingUtilities.invokeLater( () -> table.getRowSorter().toggleSortOrder(3) );
    }
});

fileChooser.showOpenDialog(frame);

Cela ajoutera le basculement de l'ordre de tri à la fin de l'EDT (Event Dispatch Thread) afin qu'il s'exécute après le comportement par défaut de la vue détaillée de la JTable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X