Olá Pessoal!
Estou tendo um probleminha e queria saber se alguem pode me dar uma ajuda ae!
Tenho um jtable de pedido da qual um vendedor ira digitar os seus produtos e efetuar posteriormente a gravacao do mesmo
quando digito o codigo do produto busco com o JPA no banco e dou um add no meu tablemodelpedido
Ate ae tudo bem aparece o codigo descricao valorunitario quantidade e valor total
o problema é se eu quiser adicionar uma linha em branco para a insercao de uma novo pedido
por exemplo quando eu clicar um VK.DOWN.
Ja tentei com DefaulTableModel mas nao tem como fazer um cast pois a tabela eh AbstractTableModel
Outra coisa tambem é se eu quiser alterar o codigo do produto ja digitado para outro codigo
Se alguem souber ou me dar uma dica de como fazer ou ate mesmo outro jeito mais simples
Obrigado e aguardo respostas
Código pedidoTableModel:
package Frames;
import ConexaoBD.Manager;
import Entidades.ItensPedido;
import Entidades.Produto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.persistence.EntityManager;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Assis
*/
public class pedidoTableModel extends AbstractTableModel {
private static final int COL_CODIGO = 0;
private static final int COL_DESCRICAO = 1;
private static final int COL_QUANTIDADE = 2;
private static final int COL_VLRUNITARIO = 3;
private static final int COL_VLRTOTAL = 4;
private List<ItensPedido> itensPedido;
//Esse é um construtor, que recebe a nossa lista de livros
public pedidoTableModel (List<ItensPedido> itensPedido) {
this.itensPedido = new ArrayList<ItensPedido>(itensPedido);
}
public int getRowCount() {
//Quantas linhas tem sua tabela? Uma para cada item da lista.
return itensPedido.size();
}
public int getColumnCount() {
//Quantas colunas tem a tabela? Nesse exemplo, só 2.
return 5;
}
@Override
public String getColumnName(int column) {
//Qual é o nome das nossas colunas?
if (column == COL_CODIGO) return "Produto";
if (column == COL_DESCRICAO) return "Descrição";
if (column == COL_QUANTIDADE) return "Quant.";
if (column == COL_VLRUNITARIO) return "Vlr. Unitário";
if (column == COL_VLRTOTAL) return "Vlr. Total";
return ""; //Nunca deve ocorrer
}
public Object getValueAt(int row, int column) {
//Precisamos retornar o valor da coluna column e da linha row.
ItensPedido itemPedido = itensPedido.get(row);
if (column == COL_CODIGO) return itemPedido.getProduto().getId();
else if (column == COL_DESCRICAO) return itemPedido.getProduto().getDescricao();
else if (column == COL_QUANTIDADE) return itemPedido.getQuantidade();
else if (column == COL_VLRUNITARIO) return itemPedido.getProduto().getPrecoVenda();
else if (column == COL_VLRTOTAL) return itemPedido.getProduto().getPrecoVenda() * itemPedido.getQuantidade();
return ""; //Nunca deve ocorrer
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
try {
if (columnIndex == COL_CODIGO) { }
if (columnIndex == COL_QUANTIDADE) itensPedido.get(rowIndex).setQuantidade(Integer.parseInt(aValue.toString()));
if (columnIndex == COL_VLRUNITARIO) itensPedido.get(rowIndex).setValorUnitario(Double.parseDouble(aValue.toString()));
} catch (Exception e) {
//Em caso de exceção, deixo o produto inalterado. Isso fará com que os valores antigos sejam desenhados.
//Pode ocorrer caso o usuário digite uma letra na quantidade, por exemplo.
}
}
@Override
public Class getColumnClass(int columnIndex) {
//Qual a classe das nossas colunas?
//if (columnIndex == COL_CODIGO) return Integer.class;
// if (columnIndex == COL_DESCRICAO) return String.class;
//As demais são double
//return Double.class;
return String.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
//Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.
if (columnIndex == COL_CODIGO) return columnIndex == COL_CODIGO;
else if (columnIndex == COL_QUANTIDADE) return columnIndex == COL_QUANTIDADE;
else if (columnIndex == COL_VLRUNITARIO) return columnIndex == COL_VLRUNITARIO;
return false;
}
//Já que esse tableModel é de livros, vamos fazer um get que retorne um livro inteiro.
//Isso elimina a necessidade de chamar o getValueAt() nas telas.
public ItensPedido get(int row) {
return itensPedido.get(row);
}
//Já respondemos ao Swing o que ele queria saber. Agora é hora de adicionar métodos para nós mesmo. :)
//Esse método permite adicionar um produto na JTable
public void add(ItensPedido itemPedido) {
//Adicionamos o produto
itensPedido.add(itemPedido);
//Avisamos a table, para que redesenhe a linha
fireTableRowsInserted(itensPedido.size()-1, itensPedido.size()-1);
}
public void addLinha () {
}
public List<ItensPedido> getProdutos() {
return Collections.unmodifiableList(itensPedido);
}
}