Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

calves_oliveira

Manipular Jtable

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;
        }
    }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rodrigo Bigas
      Olá colegas, 
      Desenvolvi um sistema simples de boletim escolar. Conforme os dados são inseridos nas textfields ao clicar no botão Resultado, deverá mostrar em uma JTable. O problema é que a última coluna (resultado) da JTable tem que estar dentro de uma condição if/else para setar se o aluno está "aprovado", "em recuperação" ou "reprovado conforme a condição". Estou com dificuldades em descobrir qual é o método correto que seta este resultado de forma dinâmica. Segue os prints:
       
      Conforme o código e o print acima, o sistema funciona somente para a primeira linha, porque está setando de forma estática, obtendo os valores do índice e coluna, qual seria o método para setar o valor de forma dinâmica do índice e coluna?
    • Por Bianca Leonardo
      Olá, pessoal.
      Estou desenvolvendo um sistema onde em uma tela de cadastro de pedidos existe um jbutton para pesquisar produtos, ao cliclar nesse botão abre uma nova JFrame com o campo pesquisar e uma Jtable. 
      Ao selecionar uma linha no JTable o Id do produto, e nome deveria retornar para a tela JFrame aberta anteriormente (o que não esta acontecendo, pois está abrindo uma nova tela de pedidos com os campos devidamente preenchidos).
       
      Código da Tela de pedido chamando a tela pesquisar produto:
       
      private void btnPesquisarProdutoActionPerformed(java.awt.event.ActionEvent evt) {                                                             // abrir a tela pesquisar produto         TelaPesquisarProdutos produtos = new TelaPesquisarProdutos();         produtos.setVisible(true);         this.add(produtos);  
      código da tela pesquisar produto setando os campos na tela pedido:
      private void tblProdutosMouseClicked(java.awt.event.MouseEvent evt) {                                                  TelaPedidos frame = new TelaPedidos();                  frame.jTabbedPane1.setSelectedIndex(1);         frame.txtIdProduto.setText(tblProdutos.getValueAt(tblProdutos.getSelectedRow(), 0).toString());         frame.txtProduto.setText(tblProdutos.getValueAt(tblProdutos.getSelectedRow(), 1).toString());                  frame.setVisible(true);         this.dispose();     }  
      Resumindo, só quero que os dois campos do JTable retorne para o primeiro JFrame aberto.
       
       
    • Por 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
       
    • Por 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; }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.