Recuperation saisie utilisateur avec java

Fermé
fanimed Messages postés 84 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 3 juillet 2009 - 20 févr. 2009 à 10:05
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 23 févr. 2009 à 10:09
Bonjour,
Bonjour,

Je débute en Java et pour m'entrainer, j'essaie de réaliser une mini-application qui demande à l'utilisateur diverses données (nom, prénom, sexe...) via une JDialog. L'objectif étant de récupérer ce que saisit l'utilisateur dans les JTextField pour ensuite créer une nouvelle ligne dans une BDD, avec, bien sur, les données entrées par l'utilisateur.

La table Logements a été crée sans problème (elle ne contient pour l'instant que la table Proprietaire) sous WAMP Server 2.0

Le problème concerne la récupération des données saisies par l'utilisateur, j'ai passé la journée à essayer des getText() et autres, rien à faire. Une ligne se rajoute dans la BDD QUE si j'écris directement les valeurs que je veux entrer, et non celles entrées par l'utilisateur dans un formulaire qui lui est proposé.

Je vous C/C ma classe ProprietaireIHM
Après compil avec javac, il ne me trouve qu'une erreur, un soi-disant ; manquant ligne 170 ( ). C'est la ligne avec la fameuse requete qui doit s'auto générer.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;

class ProprietaireIHM extends JDialog implements ActionListener, WindowListener
{
private JLabel labNom;
private JLabel labPrenom;
private JLabel labSexe;
private JLabel labAdresse;
private JLabel labCP;
private JLabel labVille;
private JLabel labTel;
private JLabel labNbLogement;

private JTextField txtNom;
private JTextField txtPrenom;
private JTextField txtAdresse;
private JTextField txtCP;
private JTextField txtVille;
private JTextField txtTel;
private JTextField txtNbLogement;

private ButtonGroup groupBRSexe;
private JRadioButton radSexeM;
private JRadioButton radSexeF;

private String titreFenetre;
private JButton butOk;
private JButton butAnnuler;

public ProprietaireIHM()
{
super();

/* Initialisation des nom de champs */
this.labNom = new JLabel("Nom :");
this.labPrenom = new JLabel("Prénom :");
this.labSexe = new JLabel("Sexe :");
this.labAdresse = new JLabel("Ville :");
this.labCP = new JLabel("CP :");
this.labVille = new JLabel("Ville :");
this.labTel = new JLabel("Téléphone :");
this.labNbLogement = new JLabel("Nombre de logements :");

this.txtNom = new JTextField();
this.txtPrenom = new JTextField();
this.txtAdresse = new JTextField();
this.txtCP = new JTextField();
this.txtVille = new JTextField();
this.txtTel = new JTextField();
this.txtNbLogement = new JTextField();

this.butOk = new JButton("Ok");
this.butAnnuler = new JButton("Annuler");
this.radSexeM = new JRadioButton("F", false);
this.radSexeF = new JRadioButton("M", true);

// Liens entre les boutons radio
groupBRSexe = new ButtonGroup();
groupBRSexe.add(radSexeM);
groupBRSexe.add(radSexeF);

this.getContentPane().setLayout(null);

// Ajout des composants à la fenêtre
this.getContentPane().add(this.labNom);
this.getContentPane().add(this.labPrenom);
this.getContentPane().add(this.labSexe);
this.getContentPane().add(this.labAdresse);
this.getContentPane().add(this.labCP);
this.getContentPane().add(this.labVille);
this.getContentPane().add(this.labTel);
this.getContentPane().add(this.labNbLogement);
this.getContentPane().add(this.txtNom);
this.getContentPane().add(this.txtPrenom);
this.getContentPane().add(this.txtAdresse);
this.getContentPane().add(this.radSexeM);
this.getContentPane().add(this.radSexeF);
this.getContentPane().add(this.txtCP);
this.getContentPane().add(this.txtVille);
this.getContentPane().add(this.txtTel);
this.getContentPane().add(this.txtNbLogement);
this.getContentPane().add(this.butOk);
this.getContentPane().add(this.butAnnuler);



// Initialisation des bounds
this.labNom.setBounds(40, 20, 120, 20);
this.txtNom.setBounds(170, 20, 120, 20);
this.labPrenom.setBounds(40, 60, 120, 20);
this.txtPrenom.setBounds(170, 60, 120, 20);
this.labSexe.setBounds(40, 100, 120, 20);
this.radSexeF.setBounds(170, 100, 120, 20);
this.radSexeM.setBounds(235, 100, 120, 20);
this.labAdresse.setBounds(40, 140, 120, 20);
this.txtAdresse.setBounds(170, 140, 120, 20);
this.labCP.setBounds(40, 180, 120, 20);
this.txtCP.setBounds(170, 180, 120, 20);
this.labVille.setBounds(40, 220, 120, 20);
this.txtVille.setBounds(170, 220, 120, 20);
this.labTel.setBounds(40, 260, 120, 20);
this.txtTel.setBounds(170, 260, 120, 20);
this.labNbLogement.setBounds(40, 300, 140, 20);
this.txtNbLogement.setBounds(170, 300, 120, 20);

this.butOk.setBounds(100, 360, 80, 20);
this.butAnnuler.setBounds(200, 360, 80, 20);

//Ajout de l'ActionListener
this.butOk.addActionListener(this);
this.butAnnuler.addActionListener(this);
this.addWindowListener(this);
}

/******************* EVENEMENTS / GEST ERREURS********************/
public void actionPerformed(ActionEvent evt)
{

if(evt.getSource() == butAnnuler)
System.exit(0);

if(evt.getSource() == butOk)
{
boolean formulaireOk = true;

if(txtNom.getText().equals(""))
{ AfficheErreur("nom");
formulaireOk = false;
}


if(txtPrenom.getText().equals(""))
{ AfficheErreur("prénom");
formulaireOk = false;
}

if(txtAdresse.getText().equals(""))
{ AfficheErreur("adresse");
formulaireOk = false;
}

if(txtCP.getText().equals(""))
{ AfficheErreur("code postal");
formulaireOk = false;
}

if(txtVille.getText().equals(""))
{ AfficheErreur("ville");
formulaireOk = false;
}

if(txtTel.getText().equals("")) // Possibilité de ne pas avoir de téléphone
AfficheErreur("téléphone");


if(txtNbLogement.getText().equals(""))
{ AfficheErreur("nombre de logement(s)");
formulaireOk = false;
}

if(formulaireOk == true)
{ JOptionPane.showMessageDialog(this, "Vous avez créé un nouveau propriétaire", "Propriétaire créé", JOptionPane.INFORMATION_MESSAGE);
Connection cxion = null ;
Statement lienBd = null ;
try { cxion = DriverManager.getConnection("jdbc:mysql://localhost/logements","root","") ;
lienBd = cxion.createStatement();
String requete = "INSERT INTO Proprietaire VALUES('','"this.getText().txtNom"','"this.getText().txtPrenom"', '"this.getSelection().groupBRSexe"', '"this.getText().txtAdresse"', '"this.getText().txtCP"', '"this.getText().txtVille"', '"this.getText().txtTel"', '"this.getText().txtNbLogement"');";
//La ligne suivante fonctionne parfaitement, mais les valeurs sont indiquées "en brut" par le programmeur.
//String requete = "INSERT INTO Proprietaire VALUES('','Salut','RE', 'G', 'ererze', '78987', 'fdsqf', 'jkljlk', 'fqdsfklsqjdlf');";
//String requete = requeteSQL;
/*ResultSet*/int resultat =0 ;
lienBd.executeUpdate(requete);

/*while ( resultat.next() )
{
System.out.println("Numero" + resultat.getInt(1) );
System.out.println("Nom" + resultat.getString(2) );
} */

cxion.close() ;
}
catch (SQLException e) {System.out.println("Entrée dans le dernier catch");}
}

}


}

public void windowClosing(WindowEvent e)
{ System.exit(0); }
public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowOpened(WindowEvent e){}


public void AfficheErreur(String paramManquant)
{ JOptionPane.showMessageDialog(this, "Votre "+paramManquant+" n'est pas indiqué", "Paramètre manquant", JOptionPane.WARNING_MESSAGE); }
}
A voir également:

3 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
20 févr. 2009 à 15:30
Bonjour,

J'ai déjà rencontré ce type d'erreur (dans ma jeunesse hohoho :p)

En fait tu ne dois pas faire référence à ton objet à l'intérieur d'un actionPerformed.
Le mieux c'est de te faire une méthode dans ta classe qui fait la mise à jour par rapport aux valeurs dans tes champs, et tu appelle cette méthode puis l'intérieur de ton actionPerformed.

Normalement ça fonctionnera correctement.
0
fanimed Messages postés 84 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 3 juillet 2009 18
20 févr. 2009 à 18:48
Wi je vois un peu ta solution.Elle est logique en tout cas.. Mais sil te plait peux tu me preciser(detailler) la methode qui va servir pour faire la mise a jour des champs ??
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
23 févr. 2009 à 10:09
Ben tu met cette partie là dans une fonction nommée par exemple "toto":
public void toto () {
Connection cxion = null ;
Statement lienBd = null ;
try { cxion = DriverManager.getConnection("jdbc:mysql://localhost/logements","root","") ;
lienBd = cxion.createStatement();
String requete = "INSERT INTO Proprietaire VALUES('','"this.getText().txtNom"','"this.getText().txtPrenom"', '"this.getSelection().groupBRSexe"', '"this.getText().txtAdresse"', '"this.getText().txtCP"', '"this.getText().txtVille"', '"this.getText().txtTel"', '"this.getText().txtNbLogement"');";
//La ligne suivante fonctionne parfaitement, mais les valeurs sont indiquées "en brut" par le programmeur.
//String requete = "INSERT INTO Proprietaire VALUES('','Salut','RE', 'G', 'ererze', '78987', 'fdsqf', 'jkljlk', 'fqdsfklsqjdlf');";
//String requete = requeteSQL;
/*ResultSet*/int resultat =0 ;
lienBd.executeUpdate(requete);

/*while ( resultat.next() )
{
System.out.println("Numero" + resultat.getInt(1) );
System.out.println("Nom" + resultat.getString(2) );
} */

cxion.close() ;
}
catch (SQLException e) {System.out.println("Entrée dans le dernier catch");} 

}


Le public est important puisque depuis l'intérieur d'un écouteur d'évènement, seules les fonctions publiques sont visible.

Puis à la place d'où tu l'avais mis tu appelle ta fonction :
if(formulaireOk == true)
{ 

toto();

JOptionPane.showMessageDialog(this, "Vous avez créé un nouveau propriétaire", "Propriétaire créé", JOptionPane.INFORMATION_MESSAGE); 
}

0