Quote:
Originariamente inviato da banryu79
Opterei per l'implementazione di un tuo Comparator da passare con la tua collezione di File a Collections.sort(), che fa il confronto tra due istanze di File in base al nome.
Per l'alfabetico ti basta usare la classe Collator in java.text, oppure potresti ovviare al problema del case trasformando tutti i nomi in uppercase o lowercase subito prima del confronto.
|
Valutato che l'ordinamento che mi serve è di tipo lessicografico, faccio ordinare l'array di File semplicemente così:
Codice:
private void openDirActionPerformed() {
JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int retval = chooser.showOpenDialog(frame);
if (retval == JFileChooser.APPROVE_OPTION) {
try {
File imgDir = chooser.getSelectedFile();
images = imgDir.listFiles();
Arrays.sort(images, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
});
img = ImageIO.read(images[0]);
frame.getImagePanel().setImage(img);
frame.getContentPane().add(frame.getImagePanel(), BorderLayout.CENTER);
index = 0;
} catch (IOException ex) {
JOptionPane.showMessageDialog(frame, "Error opening image file!", "Error!", retval);
}
}
}
Il controllo sull'estensione dei file lo voglio affidare ad una mia classe già creata che estende
FileFilter ma il metodo
listFiles(FileFilter filter) inspiegabilmente non mi accetta l'istanza di FileFilter come argomento (in documentazione c'è quel metodo!

).
Altro problema: dopo che la classe
Arrays ha ordinato l'array
images, l'elemento images[0] non contiene nessuna immagine. La prima immagine è contenuta in images[1] come se tutti gli elementi dell'array fossero splittati di una posizione a seguito dell'ordinamento.