e ai pessoal?
Estou com um problema em relacao a edicao de celulas do JTable, ao editar o texto de uma célula e tentar editar outra célula,
no momento que eu seleciono outra célula ele apaga uma linha chamando o método remove automaticamente.
Eu tenho um modelo implementado
public class ModeloTabelaDinamica extends AbstractTableModel
{
private ArrayList<String> nomesDasColunas; //Nome das colunas da tabela
private ArrayList<Object[]> dados; //Referentes a uma linha, ou seja um Object[] em cada linha
public ModeloTabelaDinamica(ArrayList<String> nomesColunas, ArrayList<Object[]> linhas)
{
if(nomesColunas != null)
this.nomesDasColunas = nomesColunas;
else
throw new NullPointerException("Nomes das colunas não especificados");
this.fireTableStructureChanged();
if(linhas != null)
{
this.dados = linhas;
this.fireTableDataChanged();
}
else
this.dados = new ArrayList<Object[]>();
}
public ModeloTabelaDinamica(ArrayList<String> nomeColunas)
{
this(nomeColunas, null);
}
public ModeloTabelaDinamica(String... nomeColunas)
{
if(nomeColunas == null)
throw new NullPointerException("Nome das Colunas nulo");
this.nomesDasColunas = new ArrayList<String>();
this.dados = new ArrayList<Object[]>();
for(String s: nomeColunas)
{
this.nomesDasColunas.add(s);
}
this.fireTableStructureChanged();
}
public int getColumnCount()
{
return nomesDasColunas.size();
}
public int getRowCount()
{
return dados.size();
}
public Object getValueAt(int linha, int coluna)
{
return dados.get(linha)[coluna];
}
@Override
public void setValueAt(Object valor, int linha, int coluna)
{
if(dados.size() > linha)
{
Object[] novo = dados.get(linha);
novo[coluna] = valor;
this.fireTableCellUpdated(linha, coluna);
}
else
{
Object[] novo = new Object[this.nomesDasColunas.size()];
novo[coluna] = valor;
dados.add(linha, novo);
this.fireTableRowsInserted(linha, linha);
}
}
public void adicionar(Object... cadastro)
{
if(cadastro.length != this.nomesDasColunas.size())
throw new IllegalArgumentException("Tamanho do vetor diferente do numero de colunas da Tabela");
this.dados.add(cadastro);
this.fireTableDataChanged();
}
public void remove(int linha)
{
this.dados.remove(linha);
this.fireTableRowsDeleted(linha, linha);
}
public int getTamanho()
{
return dados.size();
}
@Override
public String getColumnName(int i)
{
return this.nomesDasColunas.get(i);
}
public void limpaTabela()
{
this.dados.clear();
this.fireTableDataChanged();
}
public void adicionarNoMeio(int linha, Object...cadastro)
{
if(cadastro.length != this.nomesDasColunas.size())
throw new IndexOutOfBoundsException("Array com dimensão diferente do numero de colunas");
dados.add(linha, cadastro);
this.fireTableRowsInserted(linha, linha);
}
}
public class TabelaDinamica extends JTable
{
private ModeloTabelaDinamica modelo;
public TabelaDinamica(ArrayList<String> nomesDasColunas, ArrayList<Object[]> dados)
{
this.modelo = new ModeloTabelaDinamica(nomesDasColunas, dados);
this.setModel(this.modelo);
}
public TabelaDinamica(ArrayList<String> colunas)
{
this(colunas, null);
}
public TabelaDinamica(String...nomesDasColunas)
{
this.modelo = new ModeloTabelaDinamica(nomesDasColunas);
this.setModel(this.modelo);
}
public void adicionar(Object ...cadastro)
{
this.modelo.adicionar(cadastro);
}
@Override
public void remove(int linha) throws ArrayIndexOutOfBoundsException
{
this.modelo.remove(linha);
}
public int getTamanho()
{
return this.modelo.getTamanho();
}
public void limpaTabela()
{
this.modelo.limpaTabela();
}
public void adicionarNoMeio(int linha, Object...cadastro)
{
this.modelo.adicionarNoMeio(linha, cadastro);
}
public void ajustarTamanhoDasColunas(int... array)
{
if(array.length != this.getColumnCount())
throw new IllegalArgumentException("Array diferente do numero de colunas da tabela");
//AjudanteSwing.ajustarTamanhoDasColunas(this, array);
}
}
public class TabelaEditavel extends TabelaDinamica{
public TabelaEditavel(ArrayList<String> nomesDasColunas, ArrayList<Object[]> dados){
super(nomesDasColunas, dados);
}
public TabelaEditavel(ArrayList<String> colunas){
this(colunas, null);
}
public TabelaEditavel(String...nomesDasColunas){
super(nomesDasColunas);
}
public boolean isCellEditable(int row, int col){
if (col < 1) {
return false;
} else {
return true;
}
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
preciso disso, pois quando o usuário alterar o conteúdo de uma célula, a alteração será efetivada no
Banco de dados ao clicar no botao salvar.