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