Estive procurando uma solução para o meu problema, mas até agora não encontrei em lugar nenhum! Eu tenho meu próprio TableModel que é de uma classe de parcelas, bem simples. Cada parcela tem seu número, seu valor, sua data de vencimento e se já foi liquidada ou não (boolean). Eu tento mostrar na tabela os dados de cada parcela, porém está dando erro justamente neste campo “liquidado”.
O erro é este:
Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: Cannot format given Object as a Number
Modelo da tabela
package venda_parcela.tabela;
import java.util.List; import javax.swing.table.AbstractTableModel; import venda_parcela.classe.VendaParcelaClasse;
public class VendaParcelaTableModel extends AbstractTableModel {
private static final int COL_NUMERO_PARCELA = 0; private static final int COL_LIQUIDADO = 1; private static final int COL_VENCIMENTO = 2; private static final int COL_VALOR = 3; private List<VendaParcelaClasse> valores; public VendaParcelaTableModel(List<VendaParcelaClasse> valores) { this.valores = valores; } @Override public int getRowCount() { return valores.size(); }
@Override public int getColumnCount() { return 4; }
@Override public Object getValueAt(int rowIndex, int columnIndex) { VendaParcelaClasse classe = valores.get(rowIndex); if (columnIndex == COL_NUMERO_PARCELA) { return " " + classe.getNumero_parcela(); } else if (columnIndex == COL_LIQUIDADO) { return classe.isLiquidado(); } else if (columnIndex == COL_VENCIMENTO) { return " " + classe.getData_vencimento(); } else { return " " + classe.getValor(); } }
@Override public String getColumnName(int column) { String coluna = ""; switch (column) { case COL_NUMERO_PARCELA: coluna = "Nº da parcela"; break; case COL_LIQUIDADO: coluna = "Liquidado"; break; case COL_VENCIMENTO: coluna = "Vencimento"; break; case COL_VALOR: coluna = "Valor"; break; default: throw new IllegalArgumentException("Coluna inválida!"); } return coluna; }
@Override public boolean isCellEditable(int rowIndex, int columnIndex) { return (columnIndex == COL_LIQUIDADO); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { VendaParcelaClasse classe = valores.get(rowIndex); if (columnIndex == COL_LIQUIDADO){ classe.setLiquidado((Boolean) aValue); } else if (columnIndex == COL_NUMERO_PARCELA) { classe.setNumero_parcela(Integer.valueOf(aValue.toString())); } else if (columnIndex == COL_VALOR) { classe.setValor(Double.valueOf(aValue.toString())); } else if (columnIndex == COL_VENCIMENTO) { classe.setData_vencimento(aValue.toString()); } fireTableDataChanged(); }
@Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == COL_NUMERO_PARCELA) { return Integer.class; } else if (columnIndex == COL_LIQUIDADO) { return Boolean.class; } else if (columnIndex == COL_VENCIMENTO) { return String.class; } else { return Double.class; } } public VendaParcelaClasse get(int row) { return valores.get(row); }
}
Classe
package venda_parcela.classe;
public class VendaParcelaClasse { private Long id; private Long id_venda; private Long id_forma_pagamento; private String forma_pagamento; private int numero_parcela; private String data_vencimento; private String data_pagamento; private double valor; private double valor_juros; private Boolean liquidado;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getId_venda() { return id_venda; }
public void setId_venda(Long id_venda) { this.id_venda = id_venda; }
public Long getId_forma_pagamento() { return id_forma_pagamento; }
public void setId_forma_pagamento(Long id_forma_pagamento) { this.id_forma_pagamento = id_forma_pagamento; }
public String getForma_pagamento() { return forma_pagamento; }
public void setForma_pagamento(String forma_pagamento) { this.forma_pagamento = forma_pagamento; }
public int getNumero_parcela() { return numero_parcela; }
public void setNumero_parcela(int numero_parcela) { this.numero_parcela = numero_parcela; }
public String getData_vencimento() { return data_vencimento; }
public void setData_vencimento(String data_vencimento) { this.data_vencimento = data_vencimento; }
public String getData_pagamento() { return data_pagamento; }
public void setData_pagamento(String data_pagamento) { this.data_pagamento = data_pagamento; }
public double getValor() { return valor; }
public void setValor(double valor) { this.valor = valor; }
public double getValor_juros() { return valor_juros; }
public void setValor_juros(double valor_juros) { this.valor_juros = valor_juros; }
public Boolean isLiquidado() { return liquidado; }
public void setLiquidado(Boolean liquidado) { this.liquidado = liquidado; }
@Override public String toString() { return "VendaParcelaClasse{" + "id=" + id + ", id_venda=" + id_venda + ", id_forma_pagamento=" + id_forma_pagamento + ", forma_pagamento=" + forma_pagamento + ", numero_parcela=" + numero_parcela + ", data_vencimento=" + data_vencimento + ", data_pagamento=" + data_pagamento + ", valor=" + valor + ", valor_juros=" + valor_juros + ", liquidado=" + liquidado + '}'; }
}
Aqui é o método que gera as parcelas e joga no table
private void geraParcelas () { lista_parcela = new ArrayList<VendaParcelaClasse>(); if (!txtValorTotal.getText().isEmpty()) { double valor_total = new FormataNumeros().formataEstiloBancoDeDados(txtValorTotal.getText()); if (valor_total > 0) { int numero_parcelas = Integer.valueOf(comboNumeroDeParcelas.getSelectedItem().toString()); double valor_parcela = valor_total / numero_parcelas; GregorianCalendar cal = new GregorianCalendar(); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); for (int i = 0; i < numero_parcelas; i++) { VendaParcelaClasse classe = new VendaParcelaClasse(); classe.setNumero_parcela(i+1); classe.setData_vencimento(sdf.format(cal.getTime())); classe.setLiquidado((Boolean) false); classe.setValor(valor_parcela);
lista_parcela.add(classe);
cal.add(Calendar.MONTH, 1); cal.set(Calendar.DAY_OF_MONTH, 10); } tabelaParcelas.setModel(new VendaParcelaTableModel(lista_parcela)); if (tabelaParcelas.getRowCount() > 0) { tabelaParcelas.setRowSelectionInterval(0, 0); tabelaParcelas.scrollRectToVisible(tabelaParcelas.getCellRect(0, 0, true)); } } } }
Alguém pode me ajudar?