Ordenação por coluna em JTable interfere na numeração das linhas

2 respostas
AndreSI

Olá pessoal, tenho uma JTable e sabemos que quando clicamos no título da coluna o JTable ordena as linhas pela coluna clicada, ou seja as linhas da tabela mudam de lugar.
O problema é que quando uso o método pra pegar o valor de uma célula clicada ele pega o valor antes da ordenação, como resolver isso?
é esse método que uso:

private void tabelaFuncsMouseClicked(java.awt.event.MouseEvent evt) {                                         
    // TODO add your handling code here:
    if(evt.getClickCount() == 2){
        int idx = (int) modelo1.getValueAt( tabelaFuncs.getSelectedRow(),0);
        JOptionPane.showMessageDialog(null, "cod: " + idx);
      
    }
}

Por exemplo:

A tabela inicial é assim:

clico pra ordenar por código e fica assim, mas:

quando dou um clique duplo sobre a 1º linha o código permanece sendo o 2. conforme é exibido o pelo JOptionPane.showMessageDialog();

Como se resolve isso?

2 Respostas

staroski

A ordenação da JTable não altera a coleção do seu modelo de dados, ela reordena somente as células para renderização, mesmo sendo renderizadas em posições diferentes, as células continuam referenciando o valor original.

Se você quer ordenar os objetos do seu modelo de dados, então vai ter que ordenar diretamente sua coleção de objetos, fazendo isso, nem vai mais precisar usar a ordenação da JTable, já que vai ordenar os dados reais.

AndreSI

Ah então só é ordenado na renderização!

Valeu @staroski, melhor eu usar um menu popup com a opção de ordenar por cod, por nome, etc.
Obrigado!!

Criado 15 de outubro de 2016
Ultima resposta 19 de out. de 2016
Respostas 2
Participantes 2