Ir para conteúdo
Fórum Script Brasil
  • 0

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


Calves Oliveira

Pergunta

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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...