Mi spiego meglio, per esercitarmi con java stavo simulando la gestione di carte di Credito, con prelievi,versamenti, visualizza operazioni ecc... L'idea è che ogni utente possa avere da 1 a più carte di credito.
questa è la mia classe cliete
public class Cliente {
private String nome;
private String cognome;
private String codiceF;
private String via;
private String città;
private String cap;
private String telefono;
private Calendar dataDiNascita = new GregorianCalendar();
private List<CartaDiCredito> listaCarte = new ArrayList<CartaDiCredito>();
public Cliente() {}
public Cliente(String nome, String cognome, String codiceF, String via, String città,String cap,String telefono, Calendar dataDiNascita) {
this.nome = nome;
this.cognome = cognome;
this.codiceF = codiceF;
this.via = via;
this.città = città;
this.cap = cap;
this.telefono = telefono;
this.dataDiNascita = dataDiNascita;
dataDiNascita.getTime();
dataDiNascita.setLenient(false);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public String getCodiceF() {
StringBuilder sb = new StringBuilder();
sb.append(nome.substring(0, 3));
sb.append(cognome.substring(0, 3));
return sb.toString().toUpperCase();
}
public void setCodiceF(String codiceF) {
this.codiceF = codiceF;
}
public String getVia() {
return via;
}
public void setVia(String via) {
this.via = via;
}
public String getCittà() {
return città;
}
public void setCittà(String città) {
this.città = città;
}
public String getCap() {
return cap;
}
public void setCap(String cap) {
this.cap = cap;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public Calendar getDataDiNascita() {
return dataDiNascita;
}
public void setDataDiNascita(Calendar dataDiNascita) {
this.dataDiNascita = dataDiNascita;
}
public List<CartaDiCredito> getListaCarte() {
return listaCarte;
}
public void setListaCarte(List<CartaDiCredito> listaCarte) {
this.listaCarte = listaCarte;
}
public void aggiungiCarte(CartaDiCredito carta) {
this.listaCarte.add(carta);
}
public void rimuoviCarte(CartaDiCredito carta) {
this.listaCarte.remove(carta);
}
public String toStringData() {
Date d = dataDiNascita.getTime();
SimpleDateFormat data = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
return data.format(d);
}
@Override
public String toString() {
String stringa = "";
stringa +="\n";
stringa +=" Nome:" +" " + nome +"\n";
stringa +=" Cognome:" + " " + cognome +"\n";
stringa +=" Indirizzo" + " " + "Via:" +" " + via +" " +" Città" +" " + città + " " +"cap:"+ cap +"\n";
stringa +=" Telefono:" +" " + telefono;
stringa +=" Data Di Nascita:" +" " + toStringData()+"\n";
stringa += "\n";
return stringa;
}
}
Mentre questa è la mia classe CarteDiCredito
private int numeroCarta;
private double saldoCarta;
private Calendar dataRilascio = new GregorianCalendar();
private Calendar dataScadenza = new GregorianCalendar();
private List<Operazione> listaOperazioni = new ArrayList<Operazione>();
public CartaDiCredito() {}
public CartaDiCredito(int numeroCarta, double saldoCarta,Calendar dataRilascio, Calendar dataScadenza ) {
this.numeroCarta = numeroCarta;
this.saldoCarta = saldoCarta;
this.dataRilascio = dataRilascio;
this.dataScadenza = dataScadenza;
dataRilascio.getTime();
dataScadenza.getTime();
dataRilascio.setLenient(false);
dataScadenza.setLenient(false);
}
public int getNumeroCarta() {
return numeroCarta;
}
public void setNumeroCarta(int numeroCarta) {
this.numeroCarta = numeroCarta;
}
public double getSaldoCarta() {
return saldoCarta;
}
public void setSaldoCarta(double saldoCarta) {
this.saldoCarta = saldoCarta;
}
public Calendar getDataRilascio() {
return dataRilascio;
}
public void setDataRilascio(Calendar dataRilascio) {
this.dataRilascio = dataRilascio;
}
public Calendar getDataScadenza() {
return dataScadenza;
}
public void setDataScadenza(Calendar dataScadenza) {
this.dataScadenza = dataScadenza;
}
public List<Operazione> getListaOperazioni() {
return listaOperazioni;
}
public void setListaOperazioni(List<Operazione> listaOperazioni) {
this.listaOperazioni = listaOperazioni;
}
public void aggiungiOperazione(Operazione operazione) {
this.listaOperazioni.add(operazione);
}
public String toStringDataRilascio() {
Date d = dataRilascio.getTime();
SimpleDateFormat rilascio = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
return rilascio.format(d);
}
public String toStringDataScadenza() {
Date d = dataScadenza.getTime();
SimpleDateFormat scadenza = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
return scadenza.format(d);
}
public String toString() {
String stringa = "";
stringa += "\n";
stringa += " Numero Carta:" +" " + numeroCarta +"\n";
stringa += " Saldo:"+" " + saldoCarta +"\n";
stringa += " Data Rilascio:" + dataRilascio +"\n";
stringa += " Data Scadenza:" + " " + dataScadenza +"\n";
return stringa;
}
}
Questa è il Modello Della Tabella che visualizza le Carte Associate Al Cliente Selezionato
public class ModelloTabellaCarte extends AbstractTableModel{
private Cliente cliente;
private Logger logger = (Logger) LoggerFactory.getLogger(ModelloTabellaCarte.class);
public ModelloTabellaCarte(Cliente cliente) {
this.cliente = cliente;
}
public int getRowCount() {
return this.cliente.getListaCarte().size();
}
public int getColumnCount() {
return 4;
}
public Object getValueAt(int r, int c) {
if (c== 0) {
return cliente.getListaCarte().get(r).getNumeroCarta();
}else if(c == 1) {
return cliente.getListaCarte().get(r).getSaldoCarta();
}else if(c == 2) {
return cliente.getListaCarte().get(r).getDataRilascio();
}else if (c == 3) {
return cliente.getListaCarte().get(r).getDataScadenza();
}
return null;
}
public String getColumnName(int c) {
if(c == 0) {
return "Numero";
}else if (c == 1) {
return "Saldo";
}else if (c == 2) {
return "Data Di Rilascio";
}else if (c == 3) {
return "Data Scadenza";
}
return null;
}
}
E Questa è L'actionPerformed che ho scritto per far visualizzare le carte
public void actionPerformed(ActionEvent e) {
PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLOPRINCIPALE);
Cliente c = (Cliente) this.applicazione.getModello().getBean(Costanti.CLIENTE);
int riga = pp.clienteSelezionato();
c.getListaCarte().get(riga);
pp.inizializzaTabellaCarte();
applicazione.abilitazioniIniziali();
}
}
Ovviamente nel mio pannello principale ho questi due metodi
public void inizializzaTabellaCarte() {
Cliente c = (Cliente) this.vista.getModello().getBean(Costanti.CLIENTE);
ModelloTabellaCarte mtc = new ModelloTabellaCarte(c);
this.getTabellaCarte().setModel((TableModel)mtc);
this.scrollTabellaCarte.setViewportView(getTabellaCarte());
}
public int clienteSelezionato() {
return tabellaClienti.getSelectedRow();
}
In fase di compilazione tutto ok, in fase di esecuzione mi da questo errore
java.lang.NullPointerException
at it.unibas.banca.controllo.AzioneVisualizzaCarteCliente.actionPerformed(AzioneVisualizzaCarteCliente.java:37)
I dati, siccome per il momento sto simulando, vengono caricati dalla persistenza.