Excluir linha de JTable(AbstractTableModel) [Resolvido]

Olá pessoal,

Preciso criar um método para excluir uma linha selecionada usando o AbstractTableModel, alguém poderia me orientar.

Segue abaixo os trechos do fonte:

public class AdmTableModel extends AbstractTableModel {  
    //Variaveis  
    private static final int COL_ID    = 0; 
    private static final int COL_LOGIN = 1; 
    private static final int COL_NOME  = 2; 
    private final List<Administrador> lista; 

    //Criando o construtor da classe
    public AdmTableModel(List<Administrador> valores) {  
        this.lista = new ArrayList<>(valores);  
    }  

    @Override
    public int getRowCount() {
        return lista.size();  
    }

    @Override
    public int getColumnCount() {
        return 3;
    }
    
    @Override
    public String getColumnName(int column) {  
        //Variaveis
        String cNomeCol = "";
        
        //Verifica o nome da coluna
        if (column == COL_ID){
            cNomeCol = "Código";
        }else if(column == COL_LOGIN){
            cNomeCol = "Login";
        }else if(column == COL_NOME){
            cNomeCol = "Nome";
        }else{
            cNomeCol = ""; //Nunca deve ocorrer  
        }    
        
        return cNomeCol;
    }  

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {          
        //Instanciando o objeto
        Administrador objAdm = lista.get(rowIndex);  
        
        //Verificando o valor de cada coluna
        if (columnIndex == COL_ID){
            return objAdm.getCod();
        }else if(columnIndex == COL_LOGIN){
            return objAdm.getLogin();
        }else{  
            return ""; //Nunca deve ocorrer  
        }
    }
    
    @Override
    public void setValueAt(Object valor, int rowIndex, int columnIndex) {  
        Administrador objAdm = lista.get(rowIndex);  
        
        if (columnIndex == COL_ID){ 
            objAdm.setCod(valor.toString());   
        }else if(columnIndex == COL_LOGIN){
            objAdm.setLogin(valor.toString());   
        }
        
        fireTableCellUpdated(rowIndex, columnIndex); 
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {  
        return String.class;  
    }  
      
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return false;  
    }  
    
    public Administrador get(int row) {  
        return lista.get(row);  
    }  
    
    public void removeRow(int row) { 
        this.lista.remove(row);
        this.fireTableRowsDeleted(row, row);
    } 
}   
private void btnExcluirMouseClicked(java.awt.event.MouseEvent evt) {  
    int nSel = objTBAdm.getSelectedRow();
  
objModel.removeRow(nSel);
}

O que você fez está certo. Está dando problema?

Se estiver, poste o trecho que você cria o model e o trecho onde você inicializa a variável objModel.

Olá ViniGodoy,

Segue abaixo os trechos:

String cPesquisa = "";
List<Administrador> listaAdm;
AdministradorDAO objAdmDAO = new AdministradorDAO();  
AdmTableModel objModel; 
//Retorna a lista dea administradores
listaAdm = objAdmDAO.CarregaAdm();
//Insere a lista no JTable
objTBAdm.setModel(new AdmTableModel(listaAdm));
//Retorna o codigo posterior ao ultimo registro inserido no campo Codigo
txtCodigo.setText(objAdmDAO.RetUltCod());

Desculpe esqueci de mencionar, erro não apresenta, mas também não faz nada.

Agradeço desde já.

E a inicializacao da variácel objModel, cade?

Andei mexendo no fonte e deixei dessa forma:

AdmTableModel objModel = new AdmTableModel(listaAdm);

Mas quando tento chamar o form, acusa esse erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at java.util.ArrayList.<init>(ArrayList.java:164)
	at br.com.controller.AdmTableModel.<init>(AdmTableModel.java:24)
	at br.com.view.TAdministradores.<init>(TAdministradores.java:30)
	at br.com.view.TPrincipal.lblIconePastaMouseClicked(TPrincipal.java:87)
	at br.com.view.TPrincipal.access$000(TPrincipal.java:18)
	at br.com.view.TPrincipal$1.mouseClicked(TPrincipal.java:58)
	at java.awt.Component.processMouseEvent(Component.java:6508)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Essa exceção indica que a lista passada para o model está nula, verifique seu DAO.

Além disso certifique-se que você não está criando seu model 2 vezes, uma na tabela e outra na variável objModel.

AdmTableModel objModel = new AdmTableModel(listaAdm); ObjTBAdm.setModel(objModel); //sem outro new

Ou, melhor ainda, remova a variável objModel e coloque um método assim:

public AdmTableModel getModel() { return (AdmTableModel) objTBAdm.getModel(); }

Olá Viny.

Obrigado pela dica, funcionou diretinho.

Segue abaixo o resultado caso alguém esteja passando pelo mesmo problema:

public AdmTableModel getModel() {  
    return (AdmTableModel) objTBAdm.getModel();  
}  

E o evento adicionado no botão Excluir

//Chama o método para remover a linha do JTable
getModel().removeRow(nSel);