Eliminar uma linha qualquer de um JTable e realocar as linhas restantes

2 respostas
CarlosFontana

Boa tarde, tenho um método que elimana linhas selecionadas de um JTable mas o problema é que quando eu excluo uma linha a última linha permanece visualmente no JTable, gostaria de saber como devo fazer para a seguinte situação:

Linha 1
Linha 2
Linha 3

Ao eliminar a “Linha 2” a “Linha3” seja removida visualmente do JTable.

O seguinte erro aparece quando excluo uma linha:

public synchronized E elementAt(int index) {
	if (index >= elementCount) {
	    throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
	}

        return (E)elementData[index];
    }
public Object getValueAt(int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        return rowVector.elementAt(column);
    }
public Object getValueAt(int row, int column) {
        return getModel().getValueAt(convertRowIndexToModel(row),
                                     convertColumnIndexToModel(column));
    }

Está relacionado ao index, mas não sei como tratar, se alguém souber, desde já agradeço!

Método de eliminação:

public void eliminarLinha (int linha) {
        linha = tabela.getSelectedRow();
         JOptionPane.showMessageDialog(null, "" + linha);
         dtm.removeRow(linha);
    }

Ação do botão:

botaoEliminar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                eliminarLinha(tabela.getSelectedRow());
            }
        });

2 Respostas

Nicolas_Fernandes

Opa, CarlosAlexandre!

Você deve "avisar" à tabela que você eliminou uma linha dela, através do método fireTableRowsDeleted(int, int).
public void eliminarLinha (int linha) {
    linha = tabela.getSelectedRow();
    JOptionPane.showMessageDialog(null, "" + linha);
    dtm.removeRow(linha);
  
    fireTableRowsDeleted(linha, linha);
}

Dê-nos um feedback do resultado.
Espero ter ajudado,
fique com Deus! :D

CarlosFontana

Blz Nicolas!? Fiz o seguinte:

public void eliminarLinha (int linha) {
        linha = tabela.getSelectedRow();
         JOptionPane.showMessageDialog(null, "" + linha);
         dtm.removeRow(linha);
         dtm.fireTableRowsDeleted(linha, linha);
}

Mas continua o erro, estou pesquisando sobre o método fireTableRowsDeleted(row, row);
Valeu pela dica, até mais!

Obs. Encontrei esse projeto: http://www.guj.com.br/java/14184-remover-linha-do-jtable, testei ele e o botão deletar executa exatamente o que eu quero fazer, mas não está eliminando no meu projeto, estou analisando.

Criado 8 de março de 2012
Ultima resposta 8 de mar. de 2012
Respostas 2
Participantes 2