Linha JTable relacionada com um objeto

3 respostas
fdettoni

Bom, eu tenho uma JTable para mostrar dados de uma lista de musicas. Ela mostra os dados como titulo, artista, etc… A lista de musica é uma lista de objetos Musica que contém todos os dados relevantes a uma musica. Eu gostaria de ordenar esta JTable por algum dos dados. Até ai tudo bem. Mas o unico jeito que achei até agora de pegar a musica selecionada, é a partir do indice da linha mas na ordenação esse indice vai mudar, então eu teria de mudar toda a ordem da lista tbm.

Existe algum modo de ter as linhas da JTable “associadas” com um determinado objeto, ai não importando a ordem dela na lista, estaria associada a esse mesmo objeto.

Não sei se consegui ser claro, mas é ± por ai.

[]'s

3 Respostas

T

Tu pode atribuir um objeto a uma célula do JTable usando o .setValueAt(). Depois é só pegar o objeto com um cast e .getValueAt(). O valor que vai ser impresso no JTable (se estiver com os default render) vai ser o .toString() do objeto.

mister_m

A menos que voce esteja “brincando” com Swing, recomendo que voce utilize um nivel maior de abstracao para nao ter que lidar com esse tipo de detalhe. Algumas opcoes sao o JGoodies Binding e o genesis.

No genesis, seria possivel guardar a selecao assim:

@DataProvider(widgetName="musicas", objectField="musica")
public List<Musica> musicas() {
    return objetoNegocio.findMusicas(criterio);
}

public Musica getMusica() {
   return musica;
}

public void setMusica(Musica musica) {
   this.musica = musica;
}

musica vai conter sempre a musica selecionada na tabela. Voce pode obter mais informacoes sobre essa funcionalidade na documentacao do @DataProvider.

fdettoni

Bom, transvaal, aprecio a ajuda, mas já havia visto isso antes, e realmente ele pega o toString do objeto, mas eu precisaria de um toString que gerasse um array de Strings pois 1 objeto estaŕa associado a todas as cinco células na mesma linha.

mister_m, isso é um trabalho de faculdade, não é nada muito serio não. Mas eu vou dar uma olhada no que me indicou. Obrigado.

[]'s.

Criado 4 de outubro de 2006
Ultima resposta 5 de out. de 2006
Respostas 3
Participantes 3