Tri alphabétique dans une JComboBox

Résolu
azerty_qwerty
Messages postés
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019
- 23 mars 2018 à 09:57
azerty_qwerty
Messages postés
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019
- 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
16520
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 mai 2022
124
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
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019

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
16520
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 mai 2022
124 > azerty_qwerty
Messages postés
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019

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
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019

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
16520
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 mai 2022
124 > azerty_qwerty
Messages postés
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019

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
50
Date d'inscription
vendredi 23 mars 2018
Statut
Membre
Dernière intervention
7 mai 2019

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