JTable não atualiza, ao invés disso ela "fica bugada"

4 respostas
java
Moraisdelimahigor

Eu tenho uma JTable com os componentes de um banco de dados. Fiz um botão que exclui uma linha do banco de dados através de seu ID, e que também atualiza o JTable. Ele exclui a linha, mas ao invés de atualizar, tá acontecendo isso (OBS.: Não é retornado nenhuma mensagem de erro):

Antes de clicar no botão de excluir:

Depois de excluir:

OBS.: Estou usando o Netbeans 8.1
OBS.: Estou utilizando o AbstractTableModel.

Código-fonte:

private void excluirActionPerformed(java.awt.event.ActionEvent evt) {                                        
    int o = Integer.parseInt(excluido.getText().trim());
    String i = "delete from ESTADOS where ID = ?";
    try {
        PreparedStatement pst = c.conn.prepareStatement(i);
        pst.setInt(1, o);
        int x = pst.executeUpdate();
        t.fireTableStructureChanged();
        JOptionPane.showMessageDialog(null, "DEU CERTO");
    } catch (SQLException ex) {
        Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
}

PS: A variável “t” é a minha tableModel.

4 Respostas

4mega

Cara pq vc esta atualizando a estrutura?
Use o comando fireDataChange() ou algo assim.
E provavelmente vc tem que pegar seu list de Estados, e dar um remove na linha selecionada, pois só usar os comandos fire… n vai funcionar. Isso porque eles usam como base seu list e n seu banco.
Seria algo do tipo:

t.remove(jTable1.getSelectedRow());
t.fireDataChange(); // Acho q é assim q se escreve o metodo
staroski

Ser der uma lida na documentação do fireTableStructureChanged vai perceber que não é o que você quer fazer.

Faça o que nosso amigo @4mega disse, utilize o método fireTableDataChanged

Moraisdelimahigor

Fiz o que você sugeriu, mas ao invés disso, é retornado o seguinte erro:
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -1

staroski

Estás tentando acessar a posição -1 da sua lista, essa é uma posição inválida.

Dica: Sempre poste o StackTrace do erro não somente a mensagem…
O StackTrace te diz exatamente onde o problema aconteceu.

Criado 20 de outubro de 2016
Ultima resposta 20 de out. de 2016
Respostas 4
Participantes 3