Jump to content

Recommended Posts

Olá pessoal,

sou iniciante e antes de postar aqui meu pedido de ajuda estou a uns dias pesquisando como sanar minhas duvidas mas sem sucesso.

bom vamos, lá…

Em um form tenho um campo jtextField, jtable e botões novo, inserir, atualizar, excluir e atualizar.

manipular a tabela do banco de dados está tudo ok , carregar a jtable tbm!

 

porem não estou conseguindo atualizar o jtable, ao excluir, editar sem ter que ficar buscando do BD o tempo todo até mesmo que não faz sentido isso. (vários lugares ensinam desta maneira).

segue as classes:

package Model.Table;

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

/**
 *
 * @author Usuario
 */
public abstract class TableModelPadrao extends AbstractTableModel {

    protected String[] colunas;
    protected ArrayList linhas;
    protected boolean[] colEditavel;

    public TableModelPadrao(ArrayList linhas) {
        setColunas(criarColunas());
        setColEditavel(colEditavel);
        this.linhas = linhas;
    }

    protected abstract String[] criarColunas();

    protected abstract boolean[] colEditavel();

    @Override
    public int getRowCount() {
        if (linhas != null) {
            return linhas.size();
        } else {
            return 0;
        }
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return false;
    }

    @Override
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    @Override
    public String getColumnName(int col) {
        return colunas[col];
    }

    //Getter e Setter
    public String[] getColunas() {
        return colunas;
    }

    public final void setColunas(String[] colunas) {
        this.colunas = colunas;
    }

    public ArrayList getLinhas() {
        return linhas;
    }

    public void setLinhas(ArrayList linhas) {
        this.linhas = linhas;
        fireTableDataChanged();
    }

    public boolean[] getColEditavel() {
        return colEditavel;
    }

    public void setColEditavel(boolean[] colEditavel) {
        this.colEditavel = colEditavel;
    }
    
    
    public abstract void addRow(Object o);
    
    public abstract void removeRow(int linha);
    
    @Override
    public abstract void setValueAt(Object o, int linha, int coluna);
    
}


package Model.Table;

import Model.ArroladoPor;
import java.util.ArrayList;

/**
 *
 * @author Usuario
 */
public class TableArroladoPor extends TableModelPadrao {

    public TableArroladoPor(ArrayList linhas) {
        super(linhas);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ArroladoPor a = (ArroladoPor) linhas.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return a.getIdArrolado();
            case 1:
                return a.getDescricao();
            default:
                throw new IndexOutOfBoundsException("Numero de colunas no TableArroladoPor"
                        + " não é compativel com dados do banco");
        }
    }

    @Override
    protected String[] criarColunas() {
        return new String[]{"Id", "Descricão"};
    }

    @Override
    protected boolean[] colEditavel() {
        return new boolean[]{false, false};
    }

    @Override
    public void addRow(Object o) {
        this.linhas.add(o);
        this.fireTableDataChanged();
    }

    @Override
    public void removeRow(int linha) {
        this.linhas.remove(linha);
        this.fireTableRowsDeleted(linha, linha);

    }

    @Override
    public void setValueAt(Object obj, int linha, int coluna) {
        ArroladoPor a = (ArroladoPor) linhas.get(linha);

        //verifica qual valor vai ser alterado
        switch (coluna) {
//            case 0: // Primeira coluna é o codigo.
//                a.setIdArrolado(Integer.parseInt((String) obj));
//                break;
            case 1: // Segunda coluna é o descricao.
                a.setDescricao(obj.toString());
                break;
        }
        //avisa que os dados mudaram
        this.fireTableCellUpdated(linha, coluna);
    }
}


package Controller.Helper;

import Model.ArroladoPor;
import Dao.ArroladoPorDao;
import Model.Table.TableArroladoPor;
import View.Forms.FrmArroladoPor;
import java.awt.Color;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author Usuario
 */
public class ArroladoPorHelper {

    private FrmArroladoPor view;
    private TableArroladoPor modeloTabela;
    private HelperForHall helperForHall;
    private ArroladoPorDao dao;
    private ArroladoPor objClasse;

    public ArroladoPorHelper(FrmArroladoPor view) throws SQLException {
        this.dao = new ArroladoPorDao();
        this.view = view;
        this.helperForHall = new HelperForHall();

    }

    public ArroladoPorHelper() {
    }

    public ArroladoPor getModeloArroladoPor() {
        String descricao = view.getTxtDescricao().getText().toUpperCase().trim();
        int id = Integer.parseInt((view.getTabela().getValueAt(view.getTabela().getSelectedRow(), 0)).toString());
        objClasse = new ArroladoPor(id, descricao);
        return objClasse;
    }

    public ArroladoPor getModeloInserir() {
        String descricao = view.getTxtDescricao().getText().toUpperCase().trim();
        objClasse = new ArroladoPor(descricao);
        return objClasse;
    }

    public void inserir() throws SQLException {
        if (view.getTxtDescricao().getText().trim().equalsIgnoreCase("")) {
            JOptionPane.showMessageDialog(null,
                    "O campo descrição não pode ficar vazio!",
                    "Validação ", JOptionPane.ERROR_MESSAGE);
            view.getTxtDescricao().setBackground(Color.LIGHT_GRAY);
        } else {
            if (dao.VerificacaoSalvar(getModeloInserir()) != true) {
                dao.salvar(getModeloInserir());//SALVA NO BANCO
                modeloTabela.addRow(objClasse);//INSERI OBJ NA TABELA
                modeloTabela.fireTableDataChanged();

                javax.swing.JOptionPane.showMessageDialog(null,
                        "Novo registro armazenado com sucesso!",
                        "Cadastro", JOptionPane.INFORMATION_MESSAGE);

            } else {
                javax.swing.JOptionPane.showMessageDialog(null,
                        "Não foi possivel salvar, registro já existente!",
                        "Verificação ao Salvar ", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public void atualizar() throws SQLException {
        if (view.getTabela().getSelectedRow() != -1) {
            if (dao.verificaAlterar(getModeloArroladoPor()) == true) {
                JOptionPane.showMessageDialog(null,
                        "Não foi possivel editar, registro já existente!",
                        "Verificação ao Editar", JOptionPane.ERROR_MESSAGE);
            } else {
                dao.alterar(getModeloArroladoPor()); //ATUALIZA NO BANCO
                helperForHall.fieldClean(view.getPnlPesquisarPor());
                //ATUALIZA A TABELA
                modeloTabela.setValueAt(getModeloArroladoPor(), view.getTabela().getSelectedRow(), 0);
                modeloTabela.setValueAt(getModeloArroladoPor(), view.getTabela().getSelectedRow(), 1);
//                modeloTabela.fireTableDataChanged();
                JOptionPane.showMessageDialog(null,
                        "Alteracão realizado com sucesso!", "Alteração",
                        JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }

    public void excluir() throws SQLException {
        String simNao[] = {"Sim", "Nao"};
        int exclui = JOptionPane.showOptionDialog(null, "Confirma exclusão?", "Excluindo...",
                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, simNao, simNao[1]);
        if (exclui == 0) {
            if (view.getTabela().getSelectedRow() != -1) {
                if (dao.verificaExcluir(getModeloArroladoPor()) != true) {
                    //NÃO EXISTE EM OUTRA TABELA PODE EXCLUIR
                    dao.excluir(getModeloArroladoPor());
                    modeloTabela.removeRow(view.getTabela().getSelectedRow());
                    JOptionPane.showMessageDialog(null, "Exclusão realizado com sucesso!",
                            "Exclusão", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(null, "Registro existente em outra tabela!",
                            "Verificação ", javax.swing.JOptionPane.ERROR_MESSAGE);
                }
            }

        }

    }

    public void carregaTabela() throws SQLException {
        ArrayList lista = (ArrayList) dao.selectAll();
        modeloTabela = new TableArroladoPor(lista);
        configuraTabela(modeloTabela);
    }

    private void configuraTabela(TableArroladoPor model) {
        view.getTabela().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        ListSelectionModel lsm = view.getTabela().getSelectionModel();
        lsm.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    selecionarLinha(view.getTabela());
                }
            }
        });

        TableRowSorter<TableModel> sorter = new TableRowSorter<>(modeloTabela);
        view.getTabela().setRowSorter(sorter);
        view.getTabela().setModel(model);
        view.getTabela().getTableHeader().setReorderingAllowed(false);
        view.getTabela().getColumnModel().getColumn(0).setMinWidth(0);
        view.getTabela().getColumnModel().getColumn(0).setMaxWidth(0);
    }

    public void filtrarTabela() {
        TableRowSorter<TableModel> sorter = new TableRowSorter<>(modeloTabela);
        view.getTabela().setRowSorter(sorter);
        String text = view.getTxtPesquisar().getText().toUpperCase();
        if (text.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter(text));
        }
    }


    public void selecionarLinha(JTable tabela) {
        if (tabela.getSelectedRow() != -1) {
            int lin = view.getTabela().getSelectedRow();
            String descricao = (view.getTabela().getValueAt(lin, 1).toString().trim());
            view.getTxtDescricao().setText(descricao);
            setarEstadoComponentes(3);
        } else {
            view.getTxtDescricao().setText("");
        }
    }

    public void setarEstadoComponentes(int estado) {
        switch (estado) {
            //inicializa o formulario
            //Ao clicar excluir
            case 1:
                view.getTxtPesquisar().grabFocus();
                view.getTxtPesquisar().setEnabled(true);
                view.getTabela().setEnabled(false);
                view.getTxtDescricao().setEnabled(false);
                view.getBtnNovo().setEnabled(true);
                view.getBtnSalvar().setEnabled(false);
                view.getBtnEditar().setEnabled(false);
                view.getBtnExcluir().setEnabled(false);
                view.getBtnSelecionar().setEnabled(false);
                break;
            //ao filtrar   
            case 2:
                view.getTxtPesquisar().setEnabled(true);
                view.getTabela().setEnabled(true);
                view.getTxtDescricao().setEnabled(false);
                view.getBtnNovo().setEnabled(true);
                view.getBtnSalvar().setEnabled(false);
                view.getBtnEditar().setEnabled(false);
                view.getBtnExcluir().setEnabled(false);
                view.getBtnSelecionar().setEnabled(false);
                break;
            //Ao selecionar linha tabela
            case 3:
                view.getTxtPesquisar().setEnabled(true);
                view.getTabela().setEnabled(true);
                view.getTxtDescricao().setEnabled(false);
                view.getBtnNovo().setEnabled(false);
                view.getBtnSalvar().setEnabled(false);
                view.getBtnEditar().setEnabled(true);
                view.getBtnExcluir().setEnabled(true);
                view.getBtnSelecionar().setEnabled(false);
                break;
            //Ao clicar botão novo
            case 4:
                view.getTxtDescricao().grabFocus();
                view.getTxtPesquisar().setEnabled(true);
                view.getTabela().setEnabled(false);
                view.getTxtDescricao().setEnabled(true);
                view.getBtnNovo().setEnabled(false);
                view.getBtnSalvar().setEnabled(true);
                view.getBtnEditar().setEnabled(false);
                view.getBtnExcluir().setEnabled(false);
                view.getBtnSelecionar().setEnabled(false);
                break;
            //Ao apertar Salvar
            case 5:
                view.getTxtDescricao().grabFocus();
                view.getTxtPesquisar().setEnabled(true);
                view.getTabela().setEnabled(false);
                view.getTxtDescricao().setEnabled(true);
                view.getBtnNovo().setEnabled(false);
                view.getBtnSalvar().setEnabled(true);
                view.getBtnEditar().setEnabled(false);
                view.getBtnExcluir().setEnabled(false);
                view.getBtnSelecionar().setEnabled(false);
                break;
            //Ao apertar Editar
            case 6:
                view.getTxtDescricao().grabFocus();
                view.getTxtPesquisar().setEnabled(true);
                view.getTabela().setEnabled(true);
                view.getTxtDescricao().setEnabled(true);
                view.getBtnNovo().setEnabled(false);
                view.getBtnSalvar().setEnabled(true);
                view.getBtnEditar().setEnabled(false);
                view.getBtnExcluir().setEnabled(false);
                view.getBtnSelecionar().setEnabled(false);
                break;
            default:
                break;
        }
    }

}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By JGD
      Olá Pessoal,  estou tentando carregar uma jTable a partir de DefaultTableModel (duas colunas). 
      Mas a table não preenchem automaticamente ao carregar... Ficando vazia só com o cabeçalho definido no "modelo".
       
      Tenho a classe  TableModelProd configurada uma vez que via jButtons eu Adiciono e removo linhas...
      respectivamente: tabelaModel.addRow  e tabelaModel.removeRow(table.getSelectedRow());
      - Pelo menos penso eu!?!
       
      No "DAO" tenho um ArrayList :
       
       
       
      public List<Produtos> read(){                  List<Produtos> dados = new ArrayList<>();                   try {             Connection connection  = ConexaoUtil.getInstance().getConnection();             String xSql ="SELECT idProd,Produto FROM tbProdutos Order by Produto";                          PreparedStatement statement = connection.prepareStatement(xSql);             ResultSet resultset = statement.executeQuery();             while (resultset.next()) {                                  Produtos produto = new Produtos();                 produto.setIdProd(resultset.getInt("idProd"));                 produto.setNome(resultset.getString("Produto"));                                                  dados.add(produto);                 }                               connection.close();                          } catch (Exception e) {                 e.printStackTrace();                      }                  return dados;              }
       
       
      Na tela Principal faço: 
       
      CadastroProdDAO cadastroProdDAO = new CadastroProdDAO();         List<Produtos> result3 = cadastroProdDAO.read();                          for (int i = 0; i < result3.size(); i++) {             tableModel.addRow(new Object[]{result3.get(i).getIdProd(), result3.get(i).getNome()});                System.out.println(result3.get(i).getIdProd() +"|"+ result3.get(i).getNome());         }   
      Imprimindo este resultado no console (tela principal ):
      1|B1 1,50M
      2|B1 1,60M
       
      Agradeço desde já qualquer ajuda
       
      JGD
       
    • By Lucas482
      o próprio título eu acho que já descreve tudo, emfim minha tabela está recebendo as informações como null, alguém ae pode me ajudar?
      seguem os códigos:
      1º tentando inserir as infos na minha tabela
      public void adiciona() throws ClassNotFoundException { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/dbge", "root", ""); java.sql.Statement stmt = con.createStatement(); String query = "select U.nome, C.codcaixa, C.valorfechamento, C.dt_fechamento from tbCaixa C\n" + "inner join tbusuario U on U.rm = C.codusuario"; ResultSet rs = stmt.executeQuery(query); while (rs.next()) { funcionarioCaixa fc = new funcionarioCaixa(nome, numerocaixa, valorfechamento, hora); String nome = rs.getString("nome"); int codcaixa = rs.getInt("codcaixa"); double valorfechamento = rs.getDouble("valorfechamento"); Date data = rs.getDate("dt_fechamento"); this.tableModelPessoa.addCaixa(fc); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro ao receber variáveis" + ex); } } 2º minha classe funcionarioCaixa
      public class funcionarioCaixa { public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getNumerocaixa() { return numerocaixa; } public void setNumerocaixa(int numerocaixa) { this.numerocaixa = numerocaixa; } public double getValorfechamento() { return valorfechamento; } public void setValorfechamento(double valorfechamento) { this.valorfechamento = valorfechamento; } public Date getHora() { return hora; } public void setHora(Date hora) { this.hora = hora; } public funcionarioCaixa(String nome, int numerocaixa, double valorfechamento, Date hora) { this.nome = nome; this.numerocaixa = numerocaixa; this.valorfechamento = valorfechamento; this.hora = hora; } String nome; int numerocaixa; double valorfechamento; Date hora; }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.