Pergunta

eu tenho um JTable (estendido) e uma implementação de TableModel, em que tenho os métodos ...

  • moveEntryUp(int rowIdx)
  • moveEntryDown(int rowIdx)

... dentro da implementação do modelo de tabela. Eu verifiquei que estes funcionam corretamente.

No entanto, estou tendo problemas para fazer as mudanças feitas no modelo de tabela para se propagar para o real JTable. Nesta tabela, eu só permito uma seleção de linha única e tenho o botão separado para Acima e Baixa. Quando uma fila é eleita, eu preciso poder mover essa linha para cima e para baixo, e preservar a seleção.

Por exemplo
Se minhas linhas são [A, B, C(selected)], e eu pressiono o botão para cima,
Eu deveria conseguir [A, C(selected), B].

As várias abordagens que tentei até agora não conseguem atualizar os valores no jtable ou perder a seleção.


NOTA:
Eu hesito em usar uma solução que requer uma chamada explícita para repaint().
Suponha que todas as células no JTable são não editável.

Foi útil?

Solução

Respondendo à própria pergunta:

int row = mTable.getSelectedRow();
mTableModel.moveEntryUp(row);
mTable.getSelectionModel().setSelectionInterval(row -1, row -1);

Onde mTable é o jtable, e mTableModel é a minha implementação do modelo de tabela e é equivalente a mTable.getModel() (e TypeCast).

Deveria ter cutucado mais tempo antes de perguntar!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top