eu peguei alguns exemplos de abstracttabelmodel e fiz um para atender as minhas necessidades…
o codigo fonte dele esta abaixo…
na aplicacao que utiliza a tabela eu atribuo um sort para o tabelmodel
TabMenu.setRowSorter(new TableRowSorter(menutablemodel));
ate ai tudo funciona muito bem…
da o sort nas colunas e beleza
o problema e que quando eu pego a linha selecionada e executo
o get da tabela da linha apos o sort o List nao esta ordenado conforme a tabela…
linhaselecionada = TabMenu.getSelectedRow(); //retorna a linha selecionada corretamente
menutablemodel.get(linhaselecionada) // porem nao pega a linha conforma a selecao da tabela porque o list nao ordenado
ou seja nao retorna a linha desejada…
alguem tem alguma solucao para isso
[code]import java.util.List;
import javax.swing.table.AbstractTableModel;
public class MenuTableModel extends AbstractTableModel {
private static final int COL_TIPO = 0;
private static final int COL_DESCRICAO = 1;
private static final int COL_MODULO = 2;
private static final int COL_SEQ = 3;
private List<Menu> valores;
//Esse é um construtor, que recebe a nossa lista de livros
public MenuTableModel(List<Menu> valores) {
this.valores = valores;
}
@Override
public int getRowCount() {
//Quantas linhas tem sua tabela? Uma para cada item da lista.
return valores.size();
}
@Override
public int getColumnCount() {
//Quantas colunas tem a tabela? Nesse exemplo, só 2.
return 4;
}
@Override
public String getColumnName(int column) {
//Qual é o nome das nossas colunas?
if (column == COL_TIPO) {
return "Tipo";
}
if (column == COL_DESCRICAO) {
return "Descrição";
}
if (column == COL_MODULO) {
return "Módulo";
}
if (column == COL_SEQ) {
return "Seq";
}
return ""; //Nunca deve ocorrer
}
@Override
public Object getValueAt(int row, int column) {
//Precisamos retornar o valor da coluna column e da linha row.
Menu menu = valores.get(row);
if (column == COL_TIPO) {
return menu.getTipo();
} else if (column == COL_DESCRICAO) {
return menu.getDescricao();
} else if (column == COL_MODULO) {
return menu.getModulo();
} else if (column == COL_SEQ) {
return menu.getSeq();
}
return ""; //Nunca deve ocorrer
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Menu menu = valores.get(rowIndex);
//Vamos alterar o valor da coluna columnIndex na linha rowIndex com o valor aValue passado no parâmetro.
//Note que vc poderia alterar 2 campos ao invés de um só.
if (columnIndex == COL_TIPO) {
menu.setTipo(aValue.toString());
} else if (columnIndex == COL_DESCRICAO) {
menu.setDescricao(aValue.toString());
} else if (columnIndex == COL_MODULO) {
menu.setModulo(aValue.toString());
} else if (columnIndex == COL_SEQ) {
menu.setSeq(aValue.toString());
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
//Qual a classe das nossas colunas? Como estamos exibindo texto, é string.
return String.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
//Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.
return false;
}
//Já que esse tableModel é de livros, vamos fazer um get que retorne um livro inteiro.
//Isso elimina a necessidade de chamar o getValueAt() nas telas.
public Menu get(int row) {
return valores.get(row);
}
public void addLinha(Menu Menu) {
// Adiciona o registro.
valores.add(Menu);
// Pega a quantidade de registros e subtrai 1 para
// achar o último índice. A subtração é necessária
// porque os índices começam em zero.
int ultimoIndice = getRowCount() - 1;
// Notifica a mudança.
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
public void remontar(List<Menu> valores) {
this.valores = valores;
fireTableDataChanged();
}
}[/code]