[RESOLVIDO] Inserir linhas em branco AbstractTableModel

Boa tarde galera, tudo ok ?
Pessoal to com uma duvida. Estou construindo um software pro trabalho da Facul e nele tem uma tela com um painel com guias onde em uma guia cadastro as informações normais e na outra os dependentes deste funcionario. Nesta guia montei meu proprio modelo de tabela ( AbstractTableModel ),e tem um botão onde adiciono ou removo linhas na tabela, mas não consigo inserir linhas em branco onde serão preenchidas as informações do dependente. Segue o meu modelo de tabela.Se puderem me ajudar.

public class ModeloTabelaDependentes extends AbstractTableModel {

    /* Lista de Dependentes que representam as linhas. */
    private List<Dependente> linhas;

    /* Array de Strings com o nome das colunas. */
    private String[] colunas = new String[]{"Nome Dependente", "Data Nascimento", "Local Nacimento", "Cartório"};


    /* Cria um ModeloTabelaDependentes vazio. */
    public ModeloTabelaDependentes() {
        linhas = new ArrayList<Dependente>();
    }

    /* Cria um ModeloTabelaDependentes carregado com
     * a lista de dependente especificada. */
    public ModeloTabelaDependentes(List<Dependente> listaDeDependentes) {
        linhas = new ArrayList<Dependente>(listaDeDependentes);
    }


    /* Retorna a quantidade de colunas. */
    @Override
    public int getColumnCount() {
        // Está retornando o tamanho do array "colunas".
        // Mas como o array é fixo, vai sempre retornar 4.
        return colunas.length;
    }

    /* Retorna a quantidade de linhas. */
    @Override
    public int getRowCount() {
        // Retorna o tamanho da lista de dependente.
        return linhas.size();
    }

    /* Retorna o nome da coluna no índice especificado.
     * Este método é usado pela JTable para saber o texto do cabeçalho. */
    @Override
    public String getColumnName(int columnIndex) {
        // Retorna o conteúdo do Array que possui o nome das colunas
        // no índice especificado.
        return colunas[columnIndex];
    }

    ;

	/* Retorna a classe dos elementos da coluna especificada.
	 * Este método é usado pela JTable na hora de definir o editor da célula. */
	@Override
    public Class<?> getColumnClass(int columnIndex) {
        // Retorna a classe referente a coluna especificada.
        // Aqui é feito um switch para verificar qual é a coluna
        // e retornar o tipo adequado. As colunas são as mesmas
        // que foram especificadas no array "colunas".
        switch (columnIndex) {
            case 0: // Primeira coluna é o nome, que é uma String.
                return String.class;
            case 1: // Segunda coluna é o telefone, que também é uma String..
                return Date.class;
            case 2: // Terceira coluna é a data de cadastro,
                // apesar de ser do tipo Calendar,
                // estou retornando Date por causa da formatação.
                return String.class;
            case 3: // Quarta coluna é o Cartorio
                return String.class;
            default:
                // Se o índice da coluna não for válido, lança um
                // IndexOutOfBoundsException (Exceção de índice fora dos limites).
                // Não foi necessário verificar se o índice da linha é inválido,
                // pois o próprio ArrayList lança a exceção caso seja inválido.
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

    /* Retorna o valor da célula especificada
     * pelos índices da linha e da coluna. */
    @Override
    public Object getValueAt(final int rowIndex,final int columnIndex) {

        if (rowIndex > -1 && rowIndex < linhas.size()) {
            Dependente dependente = linhas.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return dependente.getNome();
                case 1:
                    return dependente.getDataNascimento();
                case 2:
                    return dependente.getlocalNascimento();
                case 3:
                    return dependente.getCartorio();                
                default:
                    return null;
            }
        }
        return null;        
    }

    /* Seta o valor da célula especificada
     * pelos índices da linha e da coluna.
     * Aqui ele está implementado para não fazer nada,
     * até porque este table model não é editável. */
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    }

    ;

	/* Retorna um valor booleano que define se a célula em questão
	 * pode ser editada ou não.
	 * Este método é utilizado pela JTable na hora de definir o editor da célula.
	 * Neste caso, estará sempre retornando false, não permitindo que nenhuma
	 * célula seja editada. */
	@Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    ////////////////////////////////////////////////////////////
    // Os métodos declarados até aqui foram as implementações //
    // de TableModel, que são continuamente utilizados        //
    // pela JTable para definir seu comportamento,            //
    // por isso o nome Table Model (Modelo da Tabela).        //
    //                                                        //
    // A partir de agora, os métodos criados serão            //
    // particulares desta classe. Eles serão úteis            //
    // em algumas situações.                                  //
    ////////////////////////////////////////////////////////////
    /* Retorna o dependente da linha especificada. */
    public Dependente getSocio(int indiceLinha) {
        return linhas.get(indiceLinha);
    }

    /* Adiciona um registro. */
    public void addDependente(Dependente dependente) {
        // Adiciona o registro.
        linhas.add(dependente);

        // Pega a quantidade de registros e subtrai um para achar
        // o último índice. É preciso subtrair um, pois os índices
        // começam pelo zero.
        int ultimoIndice = getRowCount() - 1;

        // Reporta a mudança. O JTable recebe a notificação
        // e se redesenha permitindo que visualizemos a atualização.
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }

    /* Remove a linha especificada. */
    public void removeDependente(int indiceLinha) {
        // Remove o sócio da linha especificada.    	
        linhas.remove(indiceLinha);

        // Reporta a mudança. O JTable recebe a notificação
        // e se redesenha permitindo que visualizemos a atualização.
        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }    

    /* Remove todos os registros. */
    public void limpar() {
        // Remove todos os elementos da lista de sócios.
        linhas.clear();

        // Reporta a mudança. O JTable recebe a notificação
        // e se redesenha permitindo que visualizemos a atualização.
        fireTableDataChanged();
    }

    /* Verifica se este table model está vazio. */
    public boolean isEmpty() {
        return linhas.isEmpty();
    }

    public void addLinha() {
    }
}

Obrigado.

Tente desta maneira:

addSocio(new Socio());

Não deu certo. Preciso de inserir linhsa em branco pra fazer o preenchimento da propria tabela.

Modificou seu código ?

Poste aqui, como estás inserindo na linha de sua Jtable e também seu método de adicionar na sua classe da ModeloTabelaDependentes , pois o código atual está em branco este método…

No construtor da minha tela, eu adiciono o modelo que criei na tabela.

ModeloTabelaDependentes modelo = new ModeloTabelaDependentes();

public NewJFrame() {
        initComponents();
        jTable2.setModel(modelo);
    }

e não consigo desenvolver a ação do botão para inserir a linha, não consigo utilizar o addRow() que tem no Default.

poste sua classe ModeloTabelaDependentes também…

public class ModeloTabelaDependentes extends AbstractTableModel {  
  
    /* Lista de Dependentes que representam as linhas. */  
    private List<Dependente> linhas;  
  
    /* Array de Strings com o nome das colunas. */  
    private String[] colunas = new String[]{"Nome Dependente", "Data Nascimento", "Local Nacimento", "Cartório"};  
  
  
    /* Cria um ModeloTabelaDependentes vazio. */  
    public ModeloTabelaDependentes() {  
        linhas = new ArrayList<Dependente>();  
    }  
  
    /* Cria um ModeloTabelaDependentes carregado com 
     * a lista de dependente especificada. */  
    public ModeloTabelaDependentes(List<Dependente> listaDeDependentes) {  
        linhas = new ArrayList<Dependente>(listaDeDependentes);  
    }  
  
  
    /* Retorna a quantidade de colunas. */  
    @Override  
    public int getColumnCount() {  
        // Está retornando o tamanho do array "colunas".  
        // Mas como o array é fixo, vai sempre retornar 4.  
        return colunas.length;  
    }  
  
    /* Retorna a quantidade de linhas. */  
    @Override  
    public int getRowCount() {  
        // Retorna o tamanho da lista de dependente.  
        return linhas.size();  
    }  
  
    /* Retorna o nome da coluna no índice especificado. 
     * Este método é usado pela JTable para saber o texto do cabeçalho. */  
    @Override  
    public String getColumnName(int columnIndex) {  
        // Retorna o conteúdo do Array que possui o nome das colunas  
        // no índice especificado.  
        return colunas[columnIndex];  
    }  
  
    ;  
  
    /* Retorna a classe dos elementos da coluna especificada. 
     * Este método é usado pela JTable na hora de definir o editor da célula. */  
    @Override  
    public Class<?> getColumnClass(int columnIndex) {  
        // Retorna a classe referente a coluna especificada.  
        // Aqui é feito um switch para verificar qual é a coluna  
        // e retornar o tipo adequado. As colunas são as mesmas  
        // que foram especificadas no array "colunas".  
        switch (columnIndex) {  
            case 0: // Primeira coluna é o nome, que é uma String.  
                return String.class;  
            case 1: // Segunda coluna é o telefone, que também é uma String..  
                return Date.class;  
            case 2: // Terceira coluna é a data de cadastro,  
                // apesar de ser do tipo Calendar,  
                // estou retornando Date por causa da formatação.  
                return String.class;  
            case 3: // Quarta coluna é o Cartorio  
                return String.class;  
            default:  
                // Se o índice da coluna não for válido, lança um  
                // IndexOutOfBoundsException (Exceção de índice fora dos limites).  
                // Não foi necessário verificar se o índice da linha é inválido,  
                // pois o próprio ArrayList lança a exceção caso seja inválido.  
                throw new IndexOutOfBoundsException("columnIndex out of bounds");  
        }  
    }  
  
    /* Retorna o valor da célula especificada 
     * pelos índices da linha e da coluna. */  
    @Override  
    public Object getValueAt(final int rowIndex,final int columnIndex) {  
  
        if (rowIndex > -1 && rowIndex < linhas.size()) {  
            Dependente dependente = linhas.get(rowIndex);  
            switch (columnIndex) {  
                case 0:  
                    return dependente.getNome();  
                case 1:  
                    return dependente.getDataNascimento();  
                case 2:  
                    return dependente.getlocalNascimento();  
                case 3:  
                    return dependente.getCartorio();                  
                default:  
                    return null;  
            }  
        }  
        return null;          
    }  
  
    /* Seta o valor da célula especificada 
     * pelos índices da linha e da coluna. 
     * Aqui ele está implementado para não fazer nada, 
     * até porque este table model não é editável. */  
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
    }  
  
    ;  
  
    /* Retorna um valor booleano que define se a célula em questão 
     * pode ser editada ou não. 
     * Este método é utilizado pela JTable na hora de definir o editor da célula. 
     * Neste caso, estará sempre retornando false, não permitindo que nenhuma 
     * célula seja editada. */  
    @Override  
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return false;  
    }  
  
    ////////////////////////////////////////////////////////////  
    // Os métodos declarados até aqui foram as implementações //  
    // de TableModel, que são continuamente utilizados        //  
    // pela JTable para definir seu comportamento,            //  
    // por isso o nome Table Model (Modelo da Tabela).        //  
    //                                                        //  
    // A partir de agora, os métodos criados serão            //  
    // particulares desta classe. Eles serão úteis            //  
    // em algumas situações.                                  //  
    ////////////////////////////////////////////////////////////  
    /* Retorna o dependente da linha especificada. */  
    public Dependente getSocio(int indiceLinha) {  
        return linhas.get(indiceLinha);  
    }  
  
    /* Adiciona um registro. */  
    public void addDependente(Dependente dependente) {  
        // Adiciona o registro.  
        linhas.add(dependente);  
  
        // Pega a quantidade de registros e subtrai um para achar  
        // o último índice. É preciso subtrair um, pois os índices  
        // começam pelo zero.  
        int ultimoIndice = getRowCount() - 1;  
  
        // Reporta a mudança. O JTable recebe a notificação  
        // e se redesenha permitindo que visualizemos a atualização.  
        fireTableRowsInserted(ultimoIndice, ultimoIndice);  
    }  
  
    /* Remove a linha especificada. */  
    public void removeDependente(int indiceLinha) {  
        // Remove o sócio da linha especificada.          
        linhas.remove(indiceLinha);  
  
        // Reporta a mudança. O JTable recebe a notificação  
        // e se redesenha permitindo que visualizemos a atualização.  
        fireTableRowsDeleted(indiceLinha, indiceLinha);  
    }      
  
    /* Remove todos os registros. */  
    public void limpar() {  
        // Remove todos os elementos da lista de sócios.  
        linhas.clear();  
  
        // Reporta a mudança. O JTable recebe a notificação  
        // e se redesenha permitindo que visualizemos a atualização.  
        fireTableDataChanged();  
    }  
  
    /* Verifica se este table model está vazio. */  
    public boolean isEmpty() {  
        return linhas.isEmpty();  
    }  
  
    public void addLinha() {  
    }  
}  

Caraca velho, pedi pra você adicionar a classe errada, ia te pedir a classe Dependente, mas vamos lá.

Provavelmente você deve ter uma lista de dependentes, então seu método de adicionar na sua classe ModeloTabelaDependentes deve ser basicamente isso:

public void addLinha(Dependente d) {
        linhas.add(d);
        fireTableDataChanged();
    }

e para inserir uma linha vazia, faça assim:

 Dependente d = new Dependente();
 modelo.addLinha(d);

ou diretamente assim:

modelo.addLinha(new Dependente()); //como eu disse acima no addSocio(), mas vc editou o tópico e meu código ta boiando agora, =/

lembrando que seu sua lista de dependente deve estar mais ou menos assim:

 //cria a lista com os dependentes
        ArrayList<Dependente> lista = new ArrayList<Dependente>();
        Dependente d = new Dependente();
        d.setNome("Fulano");
        lista.add(d);

        //cria o modelo de Dependentes
        modelo = new ProdutoTableModel(lista);

        //atribui o modelo à  tabela
        jTable1.setModel(modelo);

entendeu mais ou menos ?

Deu certo Lucas.

Muito Obrigado.