Organizar JList

11 respostas
M

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

11 Respostas

I

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…

M

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

S

pq vc nao usa imagem01.jpg em vez de imagem1.jpg ? dessa forma a ordenação ocorre naturalmente…

sacou ?

F

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 :wink:

M

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

F

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…

M

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

I

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…

M

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

I

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

M

É 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

Criado 19 de maio de 2004
Ultima resposta 20 de mai. de 2004
Respostas 11
Participantes 4