quando eu adicionou, alterou ou excluir algum dado da minha JTable, ele duplicar os dados
package modelTables;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import vo.EstoqueVO;
public class EstoqueTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<EstoqueVO> dados = new ArrayList<>();
private String[] colunas = { "Codigo", "Material", "Qts", "Preço", "Status" };
public EstoqueTableModel() {
dados = new ArrayList<>();
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public int getRowCount() {
return dados.size();
}
@Override
public Object getValueAt(int linha, int coluna) {
switch (coluna) {
case 0:
return dados.get(linha).getCodigo();
case 1:
return dados.get(linha).getMaterial();
case 2:
return dados.get(linha).getQts();
case 3:
return dados.get(linha).getPreco();
case 4:
return dados.get(linha).getStatus();
}
return null;
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
switch (coluna) {
case 0:
dados.get(linha).setCodigo(Integer.parseInt((String) valor));
break;
case 1:
dados.get(linha).setMaterial((String) valor);
break;
case 2:
dados.get(linha).setQts((String) valor);
break;
case 3:
dados.get(linha).setPreco(Double.parseDouble((String) valor));
break;
case 4:
dados.get(linha).setStatus((String) valor);
break;
}
this.fireTableRowsUpdated(linha, linha);
}
public void addRow(EstoqueVO e) {
this.dados.add(e);
this.fireTableDataChanged();
}
public void removeRow(int linha) {
this.dados.remove(linha);
this.fireTableRowsDeleted(linha, linha);
}
public void limpar() {
dados.clear();
fireTableDataChanged();
}
}
package view;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowSorter;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import dao.EstoqueDAO;
import modelTables.*;
import vo.EstoqueVO;
import javax.swing.AbstractButton;
import javax.swing.DefaultComboBoxModel;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class ViewEstoque extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
EstoqueTableModel tableModel = new EstoqueTableModel();
private JPanel Estoque;
private JTextField txtQts;
private JTextField txtMaterial;
private JTextField txtPreco;
private JTable tblEstoque;
private JTextField txtCodigo;
private JButton btnSalva;
private JButton btnAlterar;
private JButton btnExcluir;
private JComboBox<?> jCStatus;
int frag;
/**
* Launch the application.
*/
public static void main(String[] args) {
LookAndFeel look = new LookAndFeel();
try {
UIManager.setLookAndFeel(look.lookAndFeel);
} catch (Exception ex) {
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ViewEstoque frame = new ViewEstoque();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ViewEstoque() {
EstoqueDAO estoqueDAO = new EstoqueDAO();
setResizable(false);
setTitle("Estoque ");
setIconImage(Toolkit.getDefaultToolkit().getImage(ViewEstoque.class.getResource("/imgs/RSS.png")));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 773, 530);
Estoque = new JPanel();
Estoque.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(Estoque);
Estoque.setLayout(null);
JLabel lblEstoque = new JLabel("Estoque ");
lblEstoque.setFont(new Font("Arial", Font.PLAIN, 20));
lblEstoque.setBounds(10, 12, 138, 22);
Estoque.add(lblEstoque);
JSeparator separator = new JSeparator();
separator.setBounds(0, 45, 784, 2);
Estoque.add(separator);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(4, 113, 542, 363);
Estoque.add(scrollPane);
tblEstoque = new JTable();
tblEstoque.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent arg0) {
dadosNoCampo();
}
});
tblEstoque.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
dadosNoCampo();
}
});
tblEstoque.setModel(tableModel);
tblEstoque.setRowSorter(new TableRowSorter<EstoqueTableModel>(tableModel));
readJTable();
scrollPane.setViewportView(tblEstoque);
txtQts = new JTextField();
txtQts.setEnabled(false);
txtQts.setColumns(10);
txtQts.setBounds(376, 71, 50, 20);
Estoque.add(txtQts);
JButton btnNovo = new JButton("Novo");
btnNovo.setFont(new Font("Arial", Font.PLAIN, 14));
btnNovo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
frag = 1;
txtCodigo.setEnabled(true);
txtMaterial.setEnabled(true);
txtPreco.setEnabled(true);
txtQts.setEnabled(true);
jCStatus.setEnabled(true);
btnSalva.setEnabled(true);
btnAlterar.setEnabled(false);
btnNovo.setEnabled(false);
btnExcluir.setEnabled(false);
txtCodigo.requestFocus();
}
});
btnNovo.setBounds(621, 139, 112, 32);
Estoque.add(btnNovo);
btnAlterar = new JButton("Alterar");
btnAlterar.setFont(new Font("Arial", Font.PLAIN, 14));
btnAlterar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frag = 2;
txtCodigo.setEnabled(false);
txtMaterial.setEnabled(true);
txtPreco.setEnabled(true);
txtQts.setEnabled(true);
jCStatus.setEnabled(true);
btnSalva.setEnabled(true);
btnNovo.setEnabled(false);
btnExcluir.setEnabled(false);
}
});
btnAlterar.setBounds(621, 188, 112, 32);
Estoque.add(btnAlterar);
btnExcluir = new JButton("Excluir");
btnExcluir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
frag = 3;
if (tblEstoque.getSelectedRow() != -1) {
EstoqueVO estoqueVO = new EstoqueVO();
EstoqueDAO estoqueDAO = new EstoqueDAO();
Object[] options = { "Confirmar", "Cancelar" };
int Confirm = JOptionPane.showOptionDialog(null, "Clique Confirmar para Exluir", "Informação",
JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
if (Confirm == 0) {
estoqueVO.setCodigo((int) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 0));
estoqueDAO.delete(estoqueVO);
readJTable();
}
} else {
JOptionPane.showMessageDialog(null, "Selecione um produto para excluir");
}
}
});
btnExcluir.setFont(new Font("Arial", Font.PLAIN, 14));
btnExcluir.setBounds(621, 231, 112, 32);
Estoque.add(btnExcluir);
btnSalva = new JButton("Salvar");
btnSalva.setEnabled(false);
btnSalva.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (txtMaterial.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "preencha o Nome Do Material");
txtMaterial.requestFocus();
} else if (txtPreco.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "preencha o Preço");
txtPreco.requestFocus();
} else if (txtQts.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "preencha a Quantidade");
txtQts.requestFocus();
}
if (frag == 1) {
EstoqueVO estoqueVO = new EstoqueVO();
EstoqueDAO estoqueDAO = new EstoqueDAO();
estoqueVO.setCodigo(Integer.parseInt(txtCodigo.getText()));
estoqueVO.setMaterial(txtMaterial.getText());
estoqueVO.setPreco(Double.parseDouble(txtPreco.getText()));
estoqueVO.setQts(txtQts.getText());
estoqueVO.setStatus((String) jCStatus.getSelectedItem());
estoqueDAO.create(estoqueVO);
txtCodigo.setText("");
txtMaterial.setText("");
txtPreco.setText("");
txtQts.setText("");
jCStatus.setSelectedIndex(-1);
txtCodigo.setEnabled(false);
txtMaterial.setEnabled(false);
txtPreco.setEnabled(false);
txtQts.setEnabled(false);
jCStatus.setEnabled(false);
btnAlterar.setEnabled(true);
btnExcluir.setEnabled(true);
btnSalva.setEnabled(false);
readJTable();
}
else if (frag == 2) {
if (tblEstoque.getSelectedRow() != -1) {
dadosNoCampo();
EstoqueVO estoqueVO = new EstoqueVO();
EstoqueDAO estoqueDAO = new EstoqueDAO();
// Integer.parseInt(txtCodigo.getText())
estoqueVO.setCodigo((int) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 0));
estoqueVO.setMaterial(txtMaterial.getText());
estoqueVO.setPreco(Double.parseDouble(txtPreco.getText()));
estoqueVO.setQts(txtQts.getText());
estoqueVO.setStatus((String) jCStatus.getSelectedItem());
estoqueDAO.update(estoqueVO);
txtCodigo.setText("");
txtMaterial.setText("");
txtPreco.setText("");
txtQts.setText("");
jCStatus.setSelectedIndex(-1);
txtCodigo.setEnabled(false);
txtMaterial.setEnabled(false);
txtPreco.setEnabled(false);
txtQts.setEnabled(false);
jCStatus.setEnabled(false);
btnNovo.setEnabled(true);
btnExcluir.setEnabled(true);
btnSalva.setEnabled(false);
readJTable();
}
} /*
* else if (frag == 3) {
*
* if (tblEstoque.getSelectedRow() != -1) {
*
* tableModel.removeRow(tblEstoque.getSelectedRow()); }
*
*
* }
*/
}
});
btnSalva.setFont(new Font("Arial", Font.PLAIN, 14));
btnSalva.setBounds(621, 277, 112, 32);
Estoque.add(btnSalva);
JLabel lblQts = new JLabel("Qts: ");
lblQts.setFont(new Font("Arial", Font.PLAIN, 14));
lblQts.setBounds(337, 71, 36, 18);
Estoque.add(lblQts);
JLabel lblMaterial = new JLabel("Material: ");
lblMaterial.setFont(new Font("Arial", Font.PLAIN, 14));
lblMaterial.setBounds(148, 71, 66, 18);
Estoque.add(lblMaterial);
txtMaterial = new JTextField();
txtMaterial.setEnabled(false);
txtMaterial.setColumns(10);
txtMaterial.setBounds(215, 71, 112, 20);
Estoque.add(txtMaterial);
JLabel lblPreo = new JLabel("Pre\u00E7o");
lblPreo.setFont(new Font("Arial", Font.PLAIN, 14));
lblPreo.setBounds(436, 71, 50, 18);
Estoque.add(lblPreo);
txtPreco = new JTextField();
txtPreco.setEnabled(false);
txtPreco.setColumns(10);
txtPreco.setBounds(482, 71, 73, 20);
Estoque.add(txtPreco);
JLabel lblCodigo = new JLabel("Codigo: ");
lblCodigo.setBounds(10, 74, 46, 14);
Estoque.add(lblCodigo);
txtCodigo = new JTextField();
txtCodigo.setEnabled(false);
txtCodigo.setBounds(52, 71, 86, 20);
Estoque.add(txtCodigo);
txtCodigo.setColumns(10);
JLabel lblStatus = new JLabel("Status");
lblStatus.setBounds(565, 74, 46, 14);
Estoque.add(lblStatus);
String[] opcaoCombo = { "Em Estoque", "Estoque Baixo", "Em Falta" };
jCStatus = new JComboBox(opcaoCombo);
jCStatus.setModel(new DefaultComboBoxModel(opcaoCombo));
jCStatus.setSelectedIndex(-1);
jCStatus.addActionListener(jCStatus);
jCStatus.setEnabled(false);
jCStatus.setBounds(621, 71, 112, 20);
Estoque.add(jCStatus);
}
public void readJTable() {
EstoqueTableModel modelo = (EstoqueTableModel) tblEstoque.getModel();
EstoqueDAO edao = new EstoqueDAO();
for (EstoqueVO e : edao.read()) {
modelo.addRow(e);
modelo.fireTableDataChanged();
}
}
public void dadosNoCampo() {
txtCodigo.setText((String) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 0).toString());
txtMaterial.setText((String) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 1));
txtQts.setText((String) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 2));
txtPreco.setText((String) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 3).toString());
jCStatus.setSelectedItem((Object) tblEstoque.getValueAt(tblEstoque.getSelectedRow(), 4));
}
}
package dao;
import connection.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import vo.*;
public class EstoqueDAO {
public void create(EstoqueVO e) {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
try {
stmt = con
.prepareStatement("INSERT INTO estoque (Codigo,Material,Quatidade,preco,Status)VALUES(?,?,?,?,?)");
stmt.setInt(1, e.getCodigo());
stmt.setString(2, e.getMaterial());
stmt.setString(3, e.getQts());
stmt.setDouble(4, e.getPreco());
stmt.setString(5, e.getStatus());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Salvo com sucesso!");
} catch (SQLException ex) {
System.out.println(ex);
} finally {
ConnectionFactory.closeConnection(con, stmt);
}
}
public List<EstoqueVO> read() {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
ResultSet rs = null;
List<EstoqueVO> estoque = new ArrayList<>();
try {
stmt = con.prepareStatement("select * from estoque");
rs = stmt.executeQuery();
while (rs.next()) {
EstoqueVO estoqueVO = new EstoqueVO();
estoqueVO.setCodigo(rs.getInt("Codigo"));
estoqueVO.setMaterial(rs.getString("Material"));
estoqueVO.setPreco(rs.getDouble("preco"));
estoqueVO.setQts(rs.getString("Quatidade"));
estoqueVO.setStatus(rs.getString("Status"));
estoque.add(estoqueVO);
}
} catch (SQLException e) {
Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, e);
} finally {
ConnectionFactory.closeConnection(con, stmt, rs);
}
return estoque;
}
public void update(EstoqueVO e) {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement(
"Update estoque set Material = ? ,Quatidade = ?,preco = ? ,Status = ? where Codigo = ? ");
stmt.setString(1, e.getMaterial());
stmt.setString(2, e.getQts());
stmt.setDouble(3, e.getPreco());
stmt.setString(4, e.getStatus());
stmt.setInt(5, e.getCodigo());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Atualizado com sucesso!");
} catch (SQLException ex) {
System.out.println(ex);
} finally {
ConnectionFactory.closeConnection(con, stmt);
}
}
public void delete(EstoqueVO e) {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement("delete from estoque where Codigo = ? ");
stmt.setInt(1, e.getCodigo());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Excluido com sucesso!");
} catch (SQLException ex) {
System.out.println(ex);
} finally {
ConnectionFactory.closeConnection(con, stmt);
}
}
}