Salve galera, tenho 1 problema sério com JTable e exibição de dados:
vejam:
public Vector addLinhas(){
Vector linha = new Vector();
Vector addlinha = new Vector();
for(int x = 1; x<=getContador();x++){
if(GravaDados()){
addlinha.addElement(vnd.getPrd());
addlinha.addElement(vnd.getQtd());
addlinha.addElement(vnd.getPreco());
addlinha.addElement(vnd.getTotal());
linha.addElement(addlinha);
}
}
return linha;
}
public Vector addColunas(){
final Vector colunas = new Vector();
colunas.addElement("Produto");
colunas.addElement("Quantidade");
colunas.addElement("Valor - R$");
colunas.addElement("Total - R$");
return colunas;
}
public DefaultTableModel setaModelo(){
System.out.println("setaModelo");
DefaultTableModel modelo = new DefaultTableModel(addLinhas(), addColunas());
return modelo;
}
Este é o model da minha JTable.
public boolean GravaDados(){
boolean flag = true;
try{
//entrada de nome do produto
vnd.setPrd(String.valueOf(cbxProdutos.getSelectedItem()));
// entrada do valor do produto(substituindo . por ,)
setS(lblMostraValor.getText());
// entrada da quantidade de produtos
vnd.setQtd(Integer.parseInt(txtQtd.getText()));
// calculo do valor de qtd x valor do produto
x = Double.parseDouble(getS().replace(',', '.'));
x = x * Integer.parseInt(txtQtd.getText());
//soma do valor de todos os produtos
somavalor = somavalor + x;
//valor da soma.
setT(String.valueOf(somavalor));
vnd.setTotal(getT().replace('.', ','));//replace porque o label mostra um valor do tipo 4,02 por exemplo.
} catch(Exception e){
flag = false;
JOptionPane.showMessageDialog(null,"Erro ao Gravar!","Vendas",3);
System.out.println(e);
}
return flag;
}
Este é o meu método para inserção dos dados da tela na classe Vendas(onde ficam os getters e setters)
private void btAdicionarActionPerformed(java.awt.event.ActionEvent evt) {
try{
if(ValidaDados()){
if(GravaDados()){
//setaModelo();
tblVendas.setModel(setaModelo());
tblVendas.getColumnModel().getColumn(1).setMinWidth(80);
tblVendas.getColumnModel().getColumn(1).setMaxWidth(80);
tblVendas.getColumnModel().getColumn(2).setMinWidth(80);
tblVendas.getColumnModel().getColumn(2).setMaxWidth(80);
tblVendas.getColumnModel().getColumn(3).setMinWidth(80);
tblVendas.getColumnModel().getColumn(3).setMaxWidth(80);
setContador(getContador() +1);
if(getContador()>1){
cbxCliente.setEnabled(false);
}
}
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "Ocorreu uma falha durante a exibição dos dados.", "Atenção", JOptionPane.ERROR_MESSAGE);
System.out.println(ex);
}
}
E este é o botão que dispara o evento.
O que a JTable deveria fazer é mostrar os dados digitados em cada linha após o evento do btAdicionar.
Por ex. Colunas – Produto | Quantidade | Valor - R$ | Total - R$
1ª linha --> prd x | 5 | 2,00 | 10,00
2ª linha --> prd y | 3 | 3,00 | 19,00
3ª linha --> prd z | 2 | 10,00 | 39,00
E assim por dianta, mas com o código da maneira como foi passado. o evento do btAdicionar na 1ª vez que é disparado exibe a linha da maneira correta, na 2ª vez, ele exibe as 2 linhas com os valores que eram pra ser somente da 2ª linha, de maneira repetida.
Por ex. Colunas – Produto | Quantidade | Valor - R$ | Total - R$
1ª linha --> prd y | 3 | 3,00 | 9,00
2ª linha --> prd y | 3 | 3,00 | 18,00
sendo assim, a única coisa que permanece correta é a 4ªcoluna onde é mostrado o valor total da compra até aquele momento.
como faço para passar os valores da maneira correta para que a tabela os exiba??