Sto sviluppando, sempre a scopo didattico e con l'intendo di diventare sempre più pratico di java, un'applicazione che simula il sistema informativo per la gestioni di film e relativi attori con il ruolo che interpretano. Quello che vorrei fare e selezionando un film tra quelli presenti in una JTable cliccando sul JButton visualizzo una JDIalog con tutti gli attori che hanno partecipato e i rispettivi ruoli. Nella stessa JDialog è anche presente una ComboBox dove ci sono tutti gli attori presenti nel mio archivio. Quello che voglio fare è selezionare un'attore dalla comboBox e aggiungere il Ruolo che ha avuto interpretato nel film.
Ho scitto queste classi:
// Classe Film
public class Film implements Comparable<Film> {
private List<AttoreRuolo> listaAttoreRuolo = new ArrayList<AttoreRuolo>();
private String titolo;
private String genere;
private int durata;
public Film() {}
public Film(String titolo, String genere, int durata) {
this.titolo = titolo;
this.genere = genere;
this.durata = durata;
}
public List<AttoreRuolo> getListaAttoreRuolo() {
return listaAttoreRuolo;
}
public void setListaAttoreRuolo(List<AttoreRuolo> listaAttoreRuolo) {
this.listaAttoreRuolo = listaAttoreRuolo;
}
public String getTitolo() {
return titolo;
}
public void setTitolo(String titolo) {
this.titolo = titolo;
}
public String getGenere() {
return genere;
}
public void setGenere(String genere) {
this.genere = genere;
}
public int getDurata() {
return durata;
}
public void setDurata(int durata) {
this.durata = durata;
}
public void aggiungiRuolo(AttoreRuolo ruolo) {
this.listaAttoreRuolo.add(ruolo);
}
@Override
public String toString() {
String stringa = "";
stringa += "Titolo" + titolo +"\n";
stringa += "Genere" + genere +"\n";
stringa += "Durata" + durata +"\n";
return stringa;
}
public int compareTo(Film o) {
if (this.getDurata()> o.getDurata()) {
return -1;
} else if (this.getDurata()< o.getDurata()) {
return 1;
}
return 0;
}
}
// Classe Attore
public class Attore {
private String nome;
private String cognome;
private String nazionalita;
public Attore() {}
public Attore(String nome, String cognome, String nazionalita) {
this.nome = nome;
this.cognome = cognome;
this.nazionalita = nazionalita;
}
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 getNazionalita() {
return nazionalita;
}
public void setNazionalita(String nazionalita) {
this.nazionalita = nazionalita;
}
public String toStringAttore() {
String stringa = "";
stringa += "Nome" + nome +"\n";
stringa += "Cognome" + cognome +"\n";
stringa += "Nazionalità" + nazionalita +"\n";
return stringa;
}
}
// Classe AttoreRuolo
ublic class AttoreRuolo {
public AttoreRuolo() {}
private Attore attore;
private String ruolo;
public AttoreRuolo(Attore attore, String ruolo) {
this.attore = attore;
this.ruolo = ruolo;
}
public Attore getAttore() {
return attore;
}
public void setAttore(Attore attore) {
this.attore = attore;
}
public String getRuolo() {
return ruolo;
}
public void setRuolo(String ruolo) {
this.ruolo = ruolo;
}
public String toString() {
String stringa = "";
stringa += "Nome Attore" + attore.getNome() +"\n";
stringa += "Cognome Attore" + attore.getCognome() +"\n";
stringa += "Ruolo" + ruolo +"\n";
return stringa;
}
}
Nella JDialog ho questi due metodi, uno per inizializzare la comboBox con gli attori ed un altro che dovrebbe restituirmi l'attorore selezionato.
public void inizializzaComboBox() {
try {
comboAttori.removeItem("");
Archivio a = (Archivio) this.vista.getApplicazione().getModello().getBean(Costanti.ARCHIVIO);
comboAttori.addItem("");
for (Attore attore : a.getListaAttori()) {
comboAttori.addItem(attore.getNome() + " " + attore.getCognome());
}
}catch (Exception message) {
logger.info("Errore" + message);
}
}
public Attore getAttoreSelezionato (){
return (Attore) this.comboAttori.getSelectedItem();
}
Questo è il codice dell'Azione Aggiungi
public void actionPerformed(ActionEvent e) {
logger.info("\nEseguo l'azione:\n" + "Classe:"+" "+ this.getClass().getName()+"\n");
FinestraDettagli fd = (FinestraDettagli) this.applicazione.getVista().getSottoViste(Costanti.FINESTRA_DETTAGLI);
Modello modello = this.applicazione.getModello();
String ruolo = fd.getTextRuolo().getText();
Attore attore = fd.getAttoreSelezionato();
if(attore.equals("")) {
fd.visualizzaFinestraErrore("Selezionare Un Attore ");
}else{
String erroriCarta = this.convalidaCarta(ruolo);
if(erroriCarta.equals("")) {
AttoreRuolo ar = new AttoreRuolo(attore,ruolo);
Film f = (Film) modello.getBean(Costanti.FILM);
f.aggiungiRuolo(ar);
// fd.inizializzaComboBox();
fd.ripulisciCombo();
fd.inizializzaTabella();
applicazione.abilitazioniIniziali();
fd.finestraConferma("Inserito Nuova carta\n" +" " +ar );
logger.info("\nNuovo Carta Inserita\n");
}else{
fd.visualizzaFinestraErrore(erroriCarta);
logger.error("\nErrore inserimento Carta\n");
}
}
}
public String convalidaCarta(String ruolo) {
String errori = "";
if (ruolo.equals("")) {
errori += "\n il campo numero Carta non può essere vuoto";
}
return errori;
}
}
Quando seleziono un'attore dalla comboBox scrivo il ruolo che ha interpretato e poi clicco su JButton ho questo errore:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to it.unibas.esame2107.modello.Attore
Chiamo la Sottovista: it.unibas.esame2107.vista.FinestraDettagli
at it.unibas.esame2107.vista.FinestraDettagli.getAttoreSelezionato(FinestraDettagli.java:65)
at it.unibas.esame2107.controllo.AzioneAggiungi.actionPerformed(AzioneAggiungi.java:32)
In pratica, se non ho capito male, non riesce a fare il cast Attore a String o sbaglio?
Come posso fare per risolvere?