Tri alphabétique dans une JComboBox

Résolu
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022 - 23 mars 2018 à 09:57
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022 - 29 mars 2018 à 13:24
Bonjour,

Je charge dans une combo le nom de sous-dossiers d'un dossier avec le code ci-dessous.
Je tente de classer par ordre alphabétique les noms avec un tableau de string et "Arrays.sort". Mais cela ne fonctionne pas. Pour info, dans la JComboBox, ce qui est affiché est Nom Prénom date de naissance (ex : JAVA jadore 22.03.2018)
Merci de votre aide.

public List<String> findFoldersInDirectory(String directoryPath) {
File directory = new File(directoryPath);

FileFilter directoryFileFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};

File[] directoryListAsFile = directory.listFiles(directoryFileFilter);

List<String> foldersInDirectory = new ArrayList<String>(directoryListAsFile.length); // liste des dossiers


for (File directoryAsFile : directoryListAsFile) {

foldersInDirectory.add(directoryAsFile.getName()); //on ajoute les noms des dossiers

String[] arrays=new String[] {directoryAsFile.getName()};
Arrays.sort(arrays);

for (int i = 0; i < arrays.length; i++) {

this.addItem(arrays[i]);
}

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
23 mars 2018 à 17:50
Bonjour,

String[] arrays=new String[] {directoryAsFile.getName()};
Arrays.sort(arrays); 

Ton tableau ne contient qu'un seul élément, ici ça ne sert à rien de trier quoi que ce soit...

Si tu veux un tri pertinent il faudrait le faire sur l'ensemble des éléments ajoutés.
Par exemple un
Collections.sort(foldersInDirectory);
à faire à la fin.
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
26 mars 2018 à 01:39
List<String> foldersInDirectory = new ArrayList<String>(directoryListAsFile.length); // liste des dossiers


effectivement
Collections.sort(foldersInDirectory);
tri bien par ordre alphabétique. Mais j'ai 2 problèmes :
1/ tous les noms sont affichés les uns à la suite des autres probablement en raison de cette déclaration
List<String> foldersInDirectory = new ArrayList<String>(directoryListAsFile.length); // liste des dossiers

2/ il y a les [ ...
3/ Meme après
Collections.sort(foldersInDirectory),  
this.addItem(directoryAsFile.getName());
ne trie absolument pas par ordre alphabétique.

une idée ? Merci d'avance
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
26 mars 2018 à 08:31
Il faudrait voir le code modifié que tu as actuellement, parce que je ne comprends pas ce que tu veux dire pour tes problèmes 1 et 2, quant au 3 ça aurait du être réglé...
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
26 mars 2018 à 15:14
Voici le code :

public List<String> findFoldersInDirectory(String directoryPath) {

File directory = new File(directoryPath); // chemin d'acces aux dossiers

FileFilter directoryFileFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};

File[] directoryListAsFile = directory.listFiles(directoryFileFilter);

List<String> foldersInDirectory = new ArrayList<String>(directoryListAsFile.length); // liste des dossiers


for (File directoryAsFile : directoryListAsFile) {


foldersInDirectory.add(directoryAsFile.getName()); //on ajoute les dossiers au fur et à mesure à la liste

}

Collections.sort(foldersInDirectory);
this.addItem(foldersInDirectory); //ajout à la combobox

return foldersInDirectory;


Avec ce code, le tri est bien effectué par ordre alphabétique, mais tous les noms sont les uns derrières les autres dans la combobox et il y a des crochets. Je ne peux donc rechercher un nom en autocompletion. Exemple ci-dessous :

[Nom1 Prenom1 26.03.2000, Nom2 Prenom2 28.03.2000 etc ....


Par contre avec le code ci-dessous, les noms ne sont pas triés par ordre alphabétiques mais par contre l'autocomplétion est possible car il n' a pas de crochets et de plus les noms sont les uns sous les autres


public List<String> findFoldersInDirectory(String directoryPath) {

File directory = new File(directoryPath); // chemin d'acces aux dossiers

FileFilter directoryFileFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};

File[] directoryListAsFile = directory.listFiles(directoryFileFilter);

List<String> foldersInDirectory = new ArrayList<String>(directoryListAsFile.length); // liste des dossiers


for (File directoryAsFile : directoryListAsFile) {

foldersInDirectory.add(directoryAsFile.getName()); //on ajoute les dossiers au fur et à mesure à la liste
this.addItem(directoryAsFile.getName()); //ajout à la combobox

}

// Collections.sort(foldersInDirectory);
// this.addItem(foldersInDirectory); //ajout à la combobox

return foldersInDirectory;
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
26 mars 2018 à 18:05
this.addItem(foldersInDirectory);

foldersInDirectory c'est la liste, tu aurais plutôt dû ajouter chacun des éléments de cette liste, plutôt que la liste elle même.

Collections.sort(foldersInDirectory);
for (File folderInDirectory: foldersInDirectory)
    this.addItem(folderInDirectory);

"tous les noms sont les uns derrières les autres dans la combobox et il y a des crochets"
Ça correspond à la méthode toString() de la liste
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
27 mars 2018 à 00:13
En fait cela ne fonctionne pas car j'ai une erreur mistmatch car file ne peut être converti en string
 File folderInDirectory: foldersInDirectory
0
Rejoignez-nous