Jump to content
Fórum Script Brasil
  • 0

Jtable com filtro (evento KeyReleased) não edita e exclui


Question

Olá pessoal, tenho um form que carrega a jtable certinho com os dados bancos.

Sem utilizar o filtro na lista consigo realizar as operações de excluir e atualizar normalmente.

Porém ao acionar o evento KeyReleased no jtextField filtrando a tabela (Filtra corretamente) acontece a seguinte situação:

Editar: ao selecionar a linha desejado para editar o campo preenche uma jtextField e ao alterar a informação ao invés de alterar a linha selecionada é criado uma outra linha com a atualização.

Excluir: ao selecionar a linha desejado não exclui.

Isso acontece apenas com o filtro ativado!

Segui minhas classes relevantes para analise:

Meu Formulario

package View.Forms;

import Controller.ArroladoPorController;
import java.awt.Color;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;

/**
 *
 * @author Usuario
 */
public final class FrmArroladoPor extends javax.swing.JDialog {

    private final ArroladoPorController controller;
    private String estado;

    /**
     * Creates new form frmArroladoPor
     *
     * @param owner
     * @param modal
     * @throws java.sql.SQLException
     */
    public FrmArroladoPor(java.awt.Frame owner, boolean modal) throws SQLException {
        super(owner, modal);
        initComponents();
        controller = new ArroladoPorController(this);
        startScreen();

    }

  
    private void initComponents() {
   (...)

    private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {                                        
        estado = "salvar";
        controller.setarEstadoComponentes(4);
        controller.limparCampos();
    }                                       

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {
            controller.inserir(estado);
            controller.setarEstadoComponentes(1);
        } catch (SQLException ex) {
            Logger.getLogger(FrmArroladoPor.class.getName()).log(Level.SEVERE, null, ex);
        }
            controller.limparCampos();
    }                                         

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {                                           
        try {
            controller.excluir();
            controller.limparCampos();
            controller.setarEstadoComponentes(1);
        } catch (SQLException ex) {
            Logger.getLogger(FrmArroladoPor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                          

    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        controller.setarEstadoComponentes(6);
        estado = "editar";
    }                                         

    private void btnSelecionarActionPerformed(java.awt.event.ActionEvent evt) {                                              

    }                                             

    private void txtPesquisarKeyReleased(java.awt.event.KeyEvent evt) {                                         
//        estado = "editar";
        controller.filtrar();
        controller.setarEstadoComponentes(2);
    }                                        

    private void tabelaKeyPressed(java.awt.event.KeyEvent evt) {                                  
        estado = "editar";
        controller.selecionarLinha();
        controller.setarEstadoComponentes(3);
    }                                 

    private void txtDescricaoKeyReleased(java.awt.event.KeyEvent evt) {                                         
        getTxtDescricao().setBackground(Color.WHITE);
    }                                        

    public void startScreen() throws SQLException {
        controller.iniciaTela();
        controller.carregaTabela();
        controller.setarEstadoComponentes(1);
    }

    public JButton getBtnEditar() {
        return btnEditar;
    }

    public void setBtnEditar(JButton btnEditar) {
        this.btnEditar = btnEditar;
    }

    public JButton getBtnExcluir() {
        return btnExcluir;
    }

    public void setBtnExcluir(JButton btnExcluir) {
        this.btnExcluir = btnExcluir;
    }

    public JButton getBtnNovo() {
        return btnNovo;
    }

    public void setBtnNovo(JButton btnNovo) {
        this.btnNovo = btnNovo;
    }

    public JButton getBtnSalvar() {
        return btnSalvar;
    }

    public void setBtnSalvar(JButton btnSalvar) {
        this.btnSalvar = btnSalvar;
    }

    public JButton getBtnSelecionar() {
        return btnSelecionar;
    }

    public void setBtnSelecionar(JButton btnSelecionar) {
        this.btnSelecionar = btnSelecionar;
    }

    public JTable getTabela() {
        return tabela;
    }

    public void setTabela(JTable tabela) {
        this.tabela = tabela;
    }

    public JTextField getTxtPesquisar() {
        return txtPesquisar;
    }

    public void setTxtPesquisar(JTextField txtPesquisar) {
        this.txtPesquisar = txtPesquisar;
    }

    public JPanel getPnlCadastro() {
        return pnlCadastro;
    }

    public void setPnlCadastro(JPanel pnlCadastro) {
        this.pnlCadastro = pnlCadastro;
    }

    public JPanel getPnlPesquisarPor() {
        return pnlPesquisarPor;
    }

    public void setPnlPesquisarPor(JPanel pnlPesquisarPor) {
        this.pnlPesquisarPor = pnlPesquisarPor;
    }

    public JPanel getPnlTabela() {
        return pnlTabela;
    }

    public void setPnlTabela(JPanel pnlTabela) {
        this.pnlTabela = pnlTabela;
    }

    public JTextField getTxtDescricao() {
        return txtDescricao;
    }

    public void setTxtDescricao(JTextField txtDescricao) {
        this.txtDescricao = txtDescricao;
    }


    // Variables declaration - do not modify                     
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JButton btnSelecionar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel pnlAções;
    private javax.swing.JPanel pnlCadastro;
    private javax.swing.JPanel pnlPesquisarPor;
    private javax.swing.JPanel pnlTabela;
    private javax.swing.JScrollPane scrPane;
    private javax.swing.JTable tabela;
    private javax.swing.JTextField txtDescricao;
    private javax.swing.JTextField txtPesquisar;
MEU CONTROLLER
package Controller;

import Controller.Helper.ArroladoPorHelper;
import Controller.Helper.HelperForHall;
import View.Forms.FrmArroladoPor;
import java.sql.SQLException;

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

    private final FrmArroladoPor view;
    private final ArroladoPorHelper helper;
    private final HelperForHall helperForHall;
  

    public ArroladoPorController(FrmArroladoPor view) throws SQLException {
        this.view = view;
        this.helper = new ArroladoPorHelper(view);
        this.helperForHall = new HelperForHall();
    }

    public void limparCampos() {
        helperForHall.limpaCampos(view.getPnlPesquisarPor());
        helperForHall.limpaCampos(view.getPnlCadastro());
    }

    public void iniciaTela() {
        helperForHall.iniciaTela(this.view, "Pesquisa e Cadastra Arrolado Por");
    }

    public void carregaTabela() throws SQLException {
        helper.carregaTabelaBuscandoNoBanco();
    }

    public void inserir(String estado) throws SQLException {
        if ("salvar".equals(estado)) {
            helper.inserir();
        }
        if ("editar".equals(estado)) {
            helper.atualizar();
        }
    }

    public void excluir() throws SQLException {
        helper.excluir();
    }

    public void filtrar() {
        helper.filtrarTabela();
    }

    public void selecionarLinha() {
        helper.selecionarLinha(view.getTabela());
    }

    public void setarEstadoComponentes(int estado) {
         helper.setarEstadoComponentes(estado);
    }

}

HELPER DO CONTROLLER

package Controller.Helper;

import Model.ArroladoPor;
import Dao.ArroladoPorDao;
import Model.Table.MeuRenderer;
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.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 instanciaObjClasseArroladoPorComId() {
        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 instanciaObjClasseArroladoPorSemId() {
        String descricao = view.getTxtDescricao().getText().toUpperCase().trim();
        objClasse = new ArroladoPor(descricao);
        return objClasse;
    }

    public void inserir() throws SQLException {//pronto
        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(instanciaObjClasseArroladoPorSemId()) != true) {
                dao.salvar(instanciaObjClasseArroladoPorSemId());//SALVA NO BANCO
                modeloTabela.addRow(objClasse);
                helperForHall.limpaCampos(view.getPnlPesquisarPor());
                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 {//pronto
        if (view.getTabela().getSelectedRow() != -1) {
            if (dao.verificaAlterar(instanciaObjClasseArroladoPorComId()) == true) {
                JOptionPane.showMessageDialog(null,
                        "Não foi possivel editar, registro já existente!",
                        "Verificação ao Editar", JOptionPane.ERROR_MESSAGE);
            } else {
                dao.alterar(instanciaObjClasseArroladoPorComId());
                helperForHall.limpaCampos(view.getPnlPesquisarPor());
                //ATUALIZA A TABELA
                modeloTabela.setValueAt(instanciaObjClasseArroladoPorComId(), view.getTabela().getSelectedRow(), 0);
                modeloTabela.setValueAt(instanciaObjClasseArroladoPorComId(), 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", "não"};
        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(instanciaObjClasseArroladoPorComId()) != true) {
                    //NÃO EXISTE EM OUTRA TABELA PODE EXCLUIR
                    dao.excluir(instanciaObjClasseArroladoPorComId());
                    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 carregaTabelaBuscandoNoBanco() 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((ListSelectionEvent e) -> {
            if (!e.getValueIsAdjusting()) {
                selecionarLinha(view.getTabela());
            }
        });
        javax.swing.table.TableCellRenderer renderer = new MeuRenderer();
        view.getTabela().setDefaultRenderer(Object.class, renderer);
        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 cancelarOperacao() throws SQLException {
//        FrmArroladoPor frmArroladoPor;
//        frmArroladoPor = new FrmArroladoPor(null, true);
//        frmArroladoPor.startScreen();
//        helperForHall.fieldClean(view.getPnlCadastro());
//        helperForHall.fieldClean(view.getPnlPesquisarPor());
//        view.getTxtDescricao().setBackground(Color.white);
//        preencheTabela();
//        setarEstadoComponentes(1);
//    }
    public void setarEstadoComponentes(int estado) {
        switch (estado) {
            //inicializa o formulario
            //ao 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;
        }
    }

}

MODELA DA TABELA DA CLASSE

 

package Model.Table;

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

/**
 *
 * @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:
                // 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("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);
        Collections.sort (this.linhas);
        this.fireTableDataChanged();
        
    }

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

    @Override
    public void setValueAt(Object obj, int linha, int coluna) {
        ArroladoPor a = (ArroladoPor) linhas.get(linha);
        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;
        }
        this.fireTableCellUpdated(linha, coluna);    
    }
    
    @Override
	public int getRowCount() {
		return linhas.size();
	}

	@Override
	public int getColumnCount() {
		return colunas.length;
	} 
}
Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148681
    • Total Posts
      644506
×
×
  • Create New...