Olá pessoal, estou com o seguinte problema:
Estou listando num JList o conteúdo de um diretório com os seguintes arquivos:
Slide1.jpg/Slide2.jpg/Slide3.jpg/…/Slide9.jpg/Slide10.jpg/Slide11.jpg
Quando eu listo esses arquivos eles ficam em ordem crescente:
Slide1.jpg
Slide10.jpg
Slide11.jpg
Slide2.jpg
Slide3.jpg
…
Slide9.jpg
Mas eu gostaria de fazer com que ele organizasse na seguinte ordem:
Slide1.jpg
Slide2.jpg
Slide3.jpg
…
Slide9.jpg
Slide10.jpg
Slide11.jpg
Como eu conseguiria fazer isso ?
Abraço,
Maicon
Acho q vc vai ter q fazer isso na mão criando um metodo pra analisa o nome do arquivo…
ou mudar o nome do arquivo para
slide01.jpg
slide02.jpg
slide03.jpg
…
slide10.jpg
Obs. caso tenha mas de 100 arquivos… o nome teria q ser slide001.jpg e assim por diante…
Já tinha pensado nesta possibilidade, mas eu não teria como passar isso para meus cliente, já que parte da automação da minha ferramente ficaria inutilizavel.
Pensei inicialmente em ordenar a lista da seguinte forma:
do menor .length ao maior, seria uma saída.
Mas acho que vou terque implementar um método para separar as letras dos numeros e então sim organizá-los.
Abraço,
Maicon
pq vc nao usa imagem01.jpg em vez de imagem1.jpg ? dessa forma a ordenação ocorre naturalmente…
sacou ?
vc pode criar um array de String’s com o numero de elementos, dai nesse array, vc poe o nome dos arquivos, e verifica se eles tao com o 0 na frente do numero… se n tiver vc poe, ex:
public void poeZeros(String array[], int zeros){
String nome = "";
int pos = -1;
for (int i = 0; i < array[0].length; i++){
if (Character.isDigit(array[0].charAt(i))){
break;
pos = i;
}
else nome += array[0].charAt(i);
}
if (pos == -1) return array;
for (int i = 0; i < array.length; i++){
array[i] = array[i].substring(0, pos) + getZeros(zeros - array[i].length + pos) + array[i].substring(pos + 1);
}
}
private String getZeros(int num){
String zeros = "";
for (int i = 0; i < num; i++) zeros += "0";
return zeros;
}
observer q n ha nessecidade de retornar o array, pois arrays sao passados por referencia…
nem testei… mas eh soh vc seguir o caminho q deve funcionar 
Essa solução é uma ótima idéia, mas não resolve meu caso.
Meu caso é o seguinte, dando um exemplo:
Meu cliente vai querer abrir arquivos .jpg´s que ele irá gerar apartir do PowerPoint (no caso de windows).
O powerPoint gera jpg´s de todos os slides, dando aos jpg´s os nomes de Slide1.jpg, Slide2.jpg,… e assim por diante, o problema é quando passa de 10 onde ocorre este problema.
Quando eu importo esses jpg´s para minha aplicação eu seto a imagem de um Label com .setIcon(new Icon(path + nomeDoItemClicadoNoJList));
então os itens no JList tem que estar idênticos aos nomes dos arquivos, não permitindo-me modificar os nomes na incerção do JList.
Quanto a idéia de usar “Character.isDigit()” é muito interessante, acho que vou aproveitar parte da idéia.
Obrigado,
Assim que eu tiver uma solução envio um post. OK ?
Abraço,
Maicon
tipo, eu acho q vc n entendeu parte da ideia, vc copia todos os nomes das imagens em um array de String’s, e depois faz um quicksort no array e reinsere os dados no JList…
Felipe, eu entendi perfeitamente a exelente idéia que vc me propôs.
Agora pelo entendido o seu código fazia o seguinte (me corriga se eu estiver errado!):
Retiraria do JList:
Slide1.jpg
Slide2.jpg
…
Slide9.jpg
Slide10.jpg
Slide11.jpg
e iria repor no JList o seguinte:
Slide01.jpg
Slide02.jpg
…
Slide09.jpg
Slide10.jpg
Slide11.jpg
Certo ? (Esse foi meu entendido!)
Agora é o seguinte!
Quando eu clicar sobre o iten “Slide05.jpg”, por exemplo, ele iria dar um setIcon no JLabel com o seguinte path de arquivo:
pastaSelecionada + “\” + nomeDoItemClicado,
que no caso ficaria por exemplo assim:
C:\Imagens\Slide05.jpg,
Ok ?
O problema que ele não acharia este arquivo pois o nome do arquivo está como Slide5.jpg e não Slide05.jpg.
Foi isso que eu entendi do seu código, estou certo, ou estou super enganado ?
Obridago e um grande abraço,
Maicon
foi o q eu entendi tbm…
mas ai vc teria q ter dois metodos…
1º pra colocar o zero no nome do arquivo…
2º pra tirar o zero pra vc poder carregar o arquivo do diretorio…
São dois trabalhos, o primeiro pra por e outro pra tirar.
Seria uma solução, mas imagina se tiver arquivos com o nome:
Slide1FromP1.jpg
Slide2FromP1.jpg
Slide3FromP1.jpg
…
Slide10FromP1.jpg
…
Slide100FromP1.jpg
seria uma neura analisar o arquico com o length maior… (no caso: Slide100FromP1.jpg) e ficar varrendo o nome dos outros arquivos em busca de números no meio de caracteres e pondo o tanto de zeros necessário para complemtar o mesmo length do arquivo com length maior…
E imagina se o usuário olhando para o JList visualizar o tal do Slide05.jpg e quando ele quiser fazer alguma mudança/edição repentina neste arquivo o cara tentar achar o tal do Slide05.jpg na tal pasta e não achar ele… o usuário vai pensar, “Caramba, que cambiarra que o cara não fez pra conseguir fazer o que ele fez!”, sei lá, é minha idéia.
Estou pesquisando e pensando sobre o assunto, se fosse pra fazer uma gambiarra (dar um jeitinho) eu teria organizado os nomes primeiramente dos arquivos com menor length para o maior length…
Imagina então se tivessemos um arquivo no meio de tantos outros chamado:
Slide002.jpg
pela lógica de ordenação correta deveria ficar:
Slide1.jpg
Slide002.jpg <–
Slide3.jpg
…
Slide9.jpg
Slide10.jpg
Slide11.jpg
Concordas comigo ?
Talvés eu esteje pensando em muitas situações que possam um dia a acontecer que não sejam assim tão incômodas, mas estou pensando tb em fazer um soft um pouquinho mais robusto, quem sabe ?
Agradeço a todos,
Maicon
naum sei se é possivel…
mas vc poderia… renomea os arquivos…
na hora q vc listar o diretorio… vc verifica e coloca o maldito zero… e renomea o arquivo… ai depois coloca no Jlist…
sei q até o windows ME ele ordenava do jeito q ta o seu Jlist (fora de ordem) já no windows XP… ele ta ordenando do jeito q vc qr… bunitinho… agora vai descobrir como fizeram… heheheh
É verdade, vou passar um e-mail pra MS para ver se eles abrem os fontes deles pra mim!!! Heheheehe! Brincadeirinha !
Olha só, tb é exelente a sua idéia de renomear os arquivos, tb já pensei nisso, mas tem um problema…
Meu aplicativo é para rodar em multiplataforma, se fosse somente no Windows tudo bem, mas imagina o usuário rodar em linux onde tem os lances de permissões de arquivos (rwx = r-Leitura / w-Escrita / x-Execução), sendo assim imagina se o cara é de um grupo ou somente um usuário que poderá ler um arquivo .jpg, mas não vai ter permissão de Escrita sobre ele, então a aplicação vai dar problema, pois não terá permissão de modificação, no caso renomear o arquivo.
Putz…
Complicado não achas ?
Abraço,
Maicon