E ai galera, to com mais uma bronca com um tableModel que eu fiz aqui, básicamente à medida que eu insiro itens nesse tableModel ele altera os valores de algumas colunas automaticamente, já depurei, mas não rolou de eu achar a resposta, segue o código do evento e do TableModel:
TableModel:public class ProdutoNFETableModel extends AbstractTableModel {
public static final String[] COLUNAS = {"Código","Nome","Descricao","Quantidade","Preço", "Unidade"};
private List<Produto> dados;
public ProdutoNFETableModel(){
dados = new ArrayList<Produto>();
}
public ProdutoNFETableModel(List<Produto> ls){
if(ls == null){
dados = new ArrayList<Produto>();
}else{
dados = ls;
}
}
public void addRow(Produto p){
dados.add(p);
fireTableRowsInserted(dados.size()-1, dados.size()-1);
}
public void removeRow(Produto p){
dados.remove(p);
fireTableRowsDeleted(dados.indexOf(p), dados.indexOf(p));
}
public void removeRow(int i){
dados.remove(i);
fireTableRowsDeleted(i, i);
}
public int getRowCount() {
return dados.size();
}
@Override
public Class<?> getColumnClass(int columnIndex){
switch(columnIndex){
case 0: return Integer.class;
case 1: return String.class;
case 2: return String.class;
case 3: return Integer.class;
case 4: return Double.class;
case 5: return String.class;
default: throw new IndexOutOfBoundsException("Opção não encontrada");
}
}
public int getColumnCount() {
return COLUNAS.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
Produto produto = dados.get(rowIndex);
switch(columnIndex){
case 0: return produto.getId();
case 1: return produto.getNomeProd();
case 2: return produto.getDescricao();
case 3: return produto.getQuantidade();
case 4: return produto.getPreco();
case 5: return produto.getUnidade();
default: throw new IndexOutOfBoundsException("Opção não encontrada");
}
}
public Produto getProduto(int row){
if(row < dados.size()){
return dados.get(row);
}
else{
throw new IndexOutOfBoundsException("Numero maior que o tamanho da lista");
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex){
return false;
}
@Override
public String getColumnName(int column){
return COLUNAS[column];
}
public void setDados(List<Produto> ls){
dados = ls;
fireTableDataChanged();
}
}
Evento, aliás o problema só ocorre quando eu adiciono alguém na tabela, a exclusão ta ok:
Mais uma coisa, vocês vão notar duas tabelas pois estão sendo adicionadas a partir de outra tabela, e quando é clicado o botão a tabela "nova" adiciona.
if(tabTodosProdutos.getSelectedRow() < 0){
JOptionPane.showMessageDialog(this, "Selecione um registro antes de alterá-lo");
}
ProdutoNFETableModel pNfeTableModel = (ProdutoNFETableModel) tabelaProdutos.getModel();
ProdutoTableModel ptm = (ProdutoTableModel) tabTodosProdutos.getModel();
Produto p = ptm.getProduto(tabTodosProdutos.getSelectedRow());
String quant = JOptionPane.showInputDialog(this, "Digite a quantidade de itens para esse produto.");
String val = JOptionPane.showInputDialog(this, "Digite o valor para esse produto");
try{
p.setPreco(Double.parseDouble(val));
p.setQuantidade(Integer.parseInt(quant));
}
catch(NumberFormatException nfe){
JOptionPane.showMessageDialog(this, "Valor não aceito");
return;
}
String unidade = JOptionPane.showInputDialog(this, "Digite a unidade para este produto");
if(unidade.equalsIgnoreCase("KG")){
p.setUnidade(unidade);
}
else if(unidade.equalsIgnoreCase("CX")){
p.setUnidade(unidade);
}
else if(unidade.equalsIgnoreCase("SC")){
p.setUnidade(unidade);
}
else{
JOptionPane.showMessageDialog(this, "Unidade inválida");
return;
}
pNfeTableModel.addRow(p);
}