Estou com uma dúvida com relação a JTable e ao TableModel, até então meu sistema apenas preenchia as minhas Jtables com dados inseridos no banco, porém gostaria de fazer alteração direta na JTable e ja automaticamente alterar os valores diretamente no banco de dados, mas não sei como fazer, não sei se existe algum evento que dispararia esse valor alterado na celula da tabela e e resgataria esse novo valor inserido na celula para que eu pudesse usar para calcular novos valores e fazer um update na tabela do banco de dados para só então preencher novamente a JTable com os dados já alterados.
Meu tableModel:
public class ProdVenda extends AbstractTableModel{
private ArrayList rows = null;
private String[] Cols = null;
private List<Boolean[]> editableCells;
public ProdVenda(ArrayList linhas, String[] Colunas){
setRows(linhas);
setCols(Colunas);
}
@Override
public int getRowCount() {
return rows.size();
}
@Override
public int getColumnCount() {
return Cols.length;
}
@Override
public Object getValueAt(int rowNum, int colNum) {
Object[] linha = (Object[]) getRows().get(rowNum);
return linha[colNum];
}
@Override
public String getColumnName(int arg0){
return Cols[arg0];
}
public ArrayList getRows() {
return rows;
}
public void setRows(ArrayList rows) {
this.rows = rows;
}
public String[] getCols() {
return Cols;
}
public void setCols(String[] Cols) {
this.Cols = Cols;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
Boolean b = false;
if(columnIndex == 2){
b = true;
return true;
}else{
b = false;
}
return b;
}
}
Meu formulário que preenche os dados na Tabela:
public void PreencherTabelaVenda(){
int LinhaSelecionada = TableVenda.getSelectedRow();
ArrayList dados = new ArrayList();
String[] Colunas = new String[]{“Cód.”, “Descrição”, “Quantidade”, “Valor unitário”, “Valor Total”};
String sql2 = “SELECT * FROM tab_prod_venda WHERE pedido =”+LblPed.getText();
try {
PreparedStatement pstm = con.prepareStatement(sql2);
ResultSet Rs = pstm.executeQuery();
if(Rs.first()){
do {
dados.add(new Object[]{Rs.getInt(“cod”), Rs.getString(“descricao”), Rs.getInt(“quantidade”), Rs.getDouble(“valorunit”), Rs.getDouble(“valortotal”)});
} while (Rs.next());
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao preencher tabela com produtos da venda: "+e);
}
ProdVenda model = new ProdVenda(dados, Colunas);
TableVenda.setModel(model);
TableVenda.getColumnModel().getColumn(0).setPreferredWidth(10);
TableVenda.getColumnModel().getColumn(1).setPreferredWidth(300);
TableVenda.getColumnModel().getColumn(2).setPreferredWidth(35);
TableVenda.getColumnModel().getColumn(3).setPreferredWidth(35);
TableVenda.getColumnModel().getColumn(4).setPreferredWidth(35);
model.fireTableDataChanged();
}
Como fazer, eu crio um evento na tabela? por favor me ajudem. O meu objetivo é poder alterar a quantidade de produtos diretamente na JTable e com isso alterar o valor total e o custo total.