Removendo um arquivo do ArrayList

8 respostas
rafaelt

É o seguinte pessoal eu faço o seguinte pra adicionar um arquivo no ArrayList:

File[] files = fc.getSelectedFiles(); //Onde fc é JFileChooser
        
for(int i = 0; i < files.length; i++)
{
arquivos.add(files[i]);
}

Gostaria de saber como faço pra remover um arquivo de forma aleatória, ou seja esses arquivos que eu adiciono Vão ser mostrados numa JTable então eu escolho um e removo a linha, quando eu remover a linha eu quero que remova o arquivo, mais exatamente o arquivo que a linha foi removida.

Alguma sugestão???
Rafael

8 Respostas

ViniGodoy

Veja o método getSelectedIndices().

Ele retorna um array com todos os indices selecionados. Depois disso, basta remover do seu ArrayList.

Lembre-se de remover do último para o primeiro, senão, ao remover o primeiro, os índices dos elementos “de baixo” vão mudar!

rafaelt

ViniGodoy:
Veja o método getSelectedIndices().

Ele retorna um array com todos os indices selecionados. Depois disso, basta remover do seu ArrayList.

Lembre-se de remover do último para o primeiro, senão, ao remover o primeiro, os índices dos elementos “de baixo” vão mudar!

Fazendo assim eu vou remover o arquivo de acordo com a linha selecionada??? como sei que eu removendo aquela linha estarei removendo exatamente o arquivo dakela linha???

Obs.: não existe esse método na classe ArrayList.

abraços
Rafael

ViniGodoy

O getSelectedIndices() é do JTable, não do ArrayList. Serve para exibir para você os índices das linhas que estão selecionadas pelo usuário.
Ou seja, se você der
arquivos.remove(tabela.getSelectedIndices()[0]);

Você irá remover o primeiro elemento selecionado na tabela do ArrayList. Mas para isso funcionar cada um desses índices deve corresponder exatamente ao índice do arquivo no arraylist. O que não deve ser um problema se você povoou o seu TableModel através de um for ou um for each simples.

Uma sugestão é, implemente seu próprio table model. Não é muito difícil, basta fazer um filho de AbstractTableModel.

Crie um método delete(int row) que faça seu TableModel se encarregar de retirar o arquivo do ArrayList, apaga-lo do hd (com o método delete da classe file) e disparar um fireTableRowChanged para avisar a tabela de que aquela linha foi deletada.

Y

Bom, a grafia correta do método “seria” getSelectedIndex(), índice é tradução de index. :wink:

Mas… se bem percebo, esse método não existe na JTable. Você pode, então, usar o getSelectedRow(), que retorna o índice da linha selecionada, ou getSelectedRows(), que retorna um array de ints com os índices das linhas selecionadas.

Em uma tabela completa, você ainda pode aproveitar os métodos getSelectedColumn() e getSelectedColumns(), que retornam o índice da coluna selecionada ou um array de ints contendo os índices das colunas selecionadas, respectivamente.

ViniGodoy

Foi mal, eu confundi. Na table é realmente getSelectedRows().
:oops:

A confusão ocorreu porque getSelectedIndices() é do JList.

Agora, não foi um erro de grafia. getSelectedIndex() retorna apenas o primeiro índice selecionado, enquanto getSelectedIndices() retorna um array, com todos os índices selecionados.

É a mesma diferença do getSelectedRow() e getSelectedRows().

Se sua tabela aceita seleção múltipla, com crtl ou shift. É melhor implementar corretamente, usando getSelectedRows(), senão vai ficar estranho para o usuário da sua aplicação.

Y

É verdade, realmente o método getSelectedIndices() existe, eu pensava que Indices não era uma palavra do inglês. Desculpe pelo equívoco. :wink:

Sami_Koivu

Olá,

Realmente, em inglês o plural da palavra “index” pode ser ou “indices” ou “indexes”. Há confusão sobre isto até entre os que falam inglês como primeiro idioma.

Oxford English Dictionary:
Index Pl. indexes and indices. The pl indexes is usual in sense 5 only

  1. (a) A table of contents prefixed to a book or argument;

  2. (b) An alphabetical list at the end of a book, of the names, subjects etc, occurring in it, with indication of the places where they occur

[]s,
Sami

rafaelt

Valeu ae pessoal pela ajuda e desculpe a demora pra retornar, vou fazer então as implementações devidas e qualquer dúvida ou progresso eu posto.

Brigradão Vini pela atenção e ajuda que você vem me dando.

[]'s

Criado 3 de janeiro de 2007
Ultima resposta 8 de jan. de 2007
Respostas 8
Participantes 4