Adicionando linha em Jtable disparando evento no Jbutton

4 respostas
R

Estou caminhando com TableModel porem ha algumas duvidas que acredito que seja facil de resolver.
Tenho um metodo para adcionar uma linha no TableModel porem nao estou conseguindo dispara-lo ao clicar no Jbutton.

* To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sgd.modelo;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author regis
 */
public class DeptoTableModel extends AbstractTableModel{

    

    private static final long serialVersionUID=1L;

    private static final int COL_CD_DEPTO = 0;
    private static final int COL_DS_DEPTO = 1;

    private List<Depto> deptos;



    public DeptoTableModel(){
    deptos=new ArrayList<Depto>();
    
    }

    public DeptoTableModel(List<Depto>listas) {
        this();
        this.deptos.clear();
        this.deptos.addAll(listas);
        super.fireTableDataChanged();
        
    }

    public int getRowCount() {
        return deptos.size();
    }


    public int getColumnCount() {
        return 2;
    }

    @Override
    public String getColumnName(int column){

        if(column == COL_CD_DEPTO) return "cd_depto";
        if(column == COL_DS_DEPTO) return "ds_depto";
        return"";
    }

    @Override
    public Object getValueAt(int row, int column) {

        Depto depto=deptos.get(row);
        if(column==COL_CD_DEPTO) return depto.getCd_depto();
        else if(column==COL_DS_DEPTO) return depto.getDs_depto();
        return"";
    }
   
    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

        super.setValueAt(aValue, rowIndex, columnIndex);
    }


    @Override
    public Class<?> getColumnClass(int coluna) {
        return String.class;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex){

        return true;
        }

    public Depto get(int row){
    return deptos.get(row);
    }

   public void add(Depto depto) {
        deptos.add(depto);
       
        fireTableRowsInserted(deptos.size() - 1, deptos.size() - 1);
    }

    }

4 Respostas

ViniGodoy

E cadê o código do seu JButton?

R

Segue a implentacao do Evento que disparo quando clico no jbcadastrarDepto!

public void actionPerformed(ActionEvent e) {

       if(e.getSource()==this.jbcadastrarDepto){
            Depto depto=new Depto();
            depto.setDs_depto(tfDsdepto.getText());

            try {
                DeptoDAO dao = new DeptoDAO();
                dao.inserir(depto);
                
                //DeptoTableModel dtm = new DeptoTableModel();
                //dtm.adiciona(depto);


            } catch (Exception ex) {
                Logger.getLogger(CadastroDepto.class.getName()).log(Level.SEVERE, null, ex);
        }
            }

    }
            private TableModel getTableModelDeptos() throws Exception{


            DeptoDAO dao = new DeptoDAO();
            return new DeptoTableModel(dao.listarDepto());
    }

    }
ViniGodoy

Você não vai dar new. Vai usar o tableModel que já está nos seu JTable.

As duas linhas comentadas seriam:

DeptoTableModel dtm = (DeptoTableModel)suaTable.getModel(); dtm.adiciona(depto);

É uma boa criar um método que já faz esse cast. Acho que era a sua idéia com aquele getTableModelDeptos(). Ficaria assim:

private TableModel getTableModelDeptos() throws Exception{ return (DeptoTableModel)suaTable.getModel(); }

E aí as duas linhas ficariam:

R

VinyGodoy, Consegui atualizar a Jtable alterando as duas linhas que voce indicou que estavam comentadas. Obrigado!

Porem esta inserindo a linha com o cd_depto em branco!

Quando carrego a Jtable novamente ela traz o registro do cd_depto preenchido.

Criado 19 de maio de 2010
Ultima resposta 19 de mai. de 2010
Respostas 4
Participantes 2