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.
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;
}
}
Pergunta
Calves Oliveira
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;
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
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
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.