I work JComboBoxes and DefaultComboboxModel that I fill with my database. Now I would like to save a Enregistrement in my database. But I get this error message
java.lang.String cannot be cast to metier.Motif
This is my class Motif :
package metier;
public class Motif {
private Integer id;
private String libelle;
private Boolean recetteDepense;
Enregistrement enregistrements[];
public Motif() {
this.id = null;
this.libelle = "";
this.recetteDepense = null;
}
public Motif(Integer id, String libelle, Boolean recetteDepense, Enregistrement[] enregistrements) {
this.id = id;
this.libelle = libelle;
this.recetteDepense = recetteDepense;
this.enregistrements = enregistrements;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLibelle() {
return libelle;
}
public void setLibelle(String libelle) {
this.libelle = libelle;
}
public Boolean getRecetteDepense() {
return recetteDepense;
}
public void setRecetteDepense(Boolean recetteDepense) {
this.recetteDepense = recetteDepense;
}
public Enregistrement[] getEnregistrement() {
return enregistrements;
}
public void setEnregistrement(Enregistrement[] enregistrements) {
this.enregistrements = enregistrements;
}
@Override
public String toString() {
return "Motif{" + "id=" + id + ", libelle=" + libelle + ", recetteDepense=" + recetteDepense + ", enregistrements=" + enregistrements + '}';
}
}
And this is my function to save the Enregistrement :
public void enregistrerEnregistrement() throws DaoException {
// Déclarations de variables locales
dao = new DaoH2("gestComptes", "sa", "");
try {
dao.connecter();
Motif motif = (Motif)(((VueAjouterEnregistrement)vue).getModeleJComboBoxMotif().getSelectedItem());
System.out.print(motif.getId());
//dao.ajouterUnEnregistrement(id, idLibelle, idModeReglement, idCompte, idEtat, idMotif, PreLEnc, RecDep, DateEnr, montant, ancienSolde, nouveauSolde, dateFacture, numCHQ, anticipation);
} catch (DaoException ex) {
JOptionPane.showMessageDialog(vue, "CtrlAjouterEnregistrement - instanciation - " + ex.getMessage(), "Enregistrement", JOptionPane.ERROR_MESSAGE);
}
}
My Comboboxes work but I don’t know how to recover the element with my getters and setters of my object Motif.
I get this error:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to metier.Motif
at controleurs.CtrlAjouterEnregistrement.enregistrerEnregistrement(CtrlAjouterEnregistrement.java:235)
at vues.VueAjouterEnregistrement.jButtonValiderActionPerformed(VueAjouterEnregistrement.java:1288)
at vues.VueAjouterEnregistrement.access$000(VueAjouterEnregistrement.java:31)
at vues.VueAjouterEnregistrement$1.actionPerformed(VueAjouterEnregistrement.java:187)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
In this line
you asume that
getSelectedItem()returns aMotifwhere in fact it returns aString.You shouldn’t add strings to the combo box, but Motifs, and have Motif implement
toStringto be properly represented in the GUI. Then thegetSelectedItemmethod will get you the selected Motif.