Voila donc j'ai un bouton dans mon code principal de ma fenetre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class GestionSQLFenetre extends JFrame{
 
	private JLabel label,label2,label3,numeroEtudiantLabel,nomLabel,prenomLabel,numVoieLabel,voieLabel,villeLabel,codePostalLabel;
	private JComboBox liste,liste2;
	private JPanel panel;
	private JButton bouton1,bouton2,bouton3;
	private JTextField numeroEtudiantField,nomField,prenomField,numVoieField,voieField,villeField,codePostalField;
 
    public GestionSQLFenetre() {
    	super();
 
    	build();
    }
    private void build(){
    	setTitle("Gestion de la base de donnée"); //On donne un titre à l'application
		setSize(470,400); //On donne une taille à notre fenêtre
		setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
		setResizable(false); //On interdit la redimensionnement de la fenêtre
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
		setContentPane(buildContentPane());
   	}
   	private JPanel buildContentPane(){
                //....
 
                bouton3 = new JButton(new ExecutionRequete(this, "Executer"));
		panel.add(bouton3); //On ajoute le bouton au panel
		bouton3.setVisible(false);
 
               //.....
Donc ce bouton comme ces paramètre le montre il lance le programme ExecutionRequete que voici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.awt.event.ActionEvent;
import java.awt.*;
import javax.swing.*;
 
 
public class ExecutionRequete extends AbstractAction {
	private GestionSQLFenetre fenetre;
	private CreationEtudiant createEtudiant;
 
    public ExecutionRequete(GestionSQLFenetre fenetre, String texte) {
    	super(texte);
 
		this.fenetre = fenetre;
    }
    public ExecutionRequete(CreationEtudiant createEtudiant, String texte){
    	super(texte);
 
    	this.createEtudiant = createEtudiant;
    }
 
    public void actionPerformed(ActionEvent e) { 
 
		//Action lors du clic sur le bouton1
 
		String gestion = fenetre.getModelGestion().getSelectedGestion();
		String gestion2 = fenetre.getModelGestion2().getSelectedGestion2();
 
		if (("Ajouter".equals(gestion2))&&("Gestion Etudiant".equals(gestion))){
			createEtudiant.CreationEtudiant();
		}
    }
 
}
Si la conditions est juste ( elle fonctionne tester avec boite de dialogue ) cela me lance la class CreationEtudiant(); donc qui se trouve dans le programme CreationEtudiant que voici

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class CreationEtudiant {
	private GestionSQLFenetre fenetre;
	private CreationEtudiant createEtudiant;
 
	public void CreationEtudiant(){
		try{
			// Dec des variable
			String numeroEtudiant,nom,prenom,numVoie,voie,ville,requete,idville,codePostal;
			Statement stmt=null;
			ResultSet rs;
 
			numeroEtudiant = fenetre.getNumeroEtudiantField().getText();
			nom = fenetre.getNomField().getText();
			prenom = fenetre.getPrenomField().getText();
			numVoie = fenetre.getNumVoieField().getText();
			voie = fenetre.getVoieField().getText();
			ville = fenetre.getVilleField().getText();
			codePostal = fenetre.getCodePostalField().getText();
 
			//connexion
			Class.forName("com.mysql.jdbc.Driver");
			String url ="jdbc:mysql://localhost/java";
			// Pour les étudiants : String url="jdbc:mysql://src-mysql/<nom de votre base de données";
			System.out.println("Connexion a la base de donnees");
			Connection con = DriverManager.getConnection(url,"root", ""); // Pour les étudiants SRC utiliser utilisateur et mot de passe de connexion à la base de données
			System.out.println("Connecte");
			stmt = con.createStatement();
 
			//Verification de l'existence de la ville dans la base de donnée
			requete = "SELECT idville FROM ville WHERE ville='"+ville+"';";
			rs = stmt.executeQuery(requete);
			if (rs.next()){
				idville = rs.getString ("idville");
			} else {
				idville = "";
			}
			if ( idville == "" ) {
				// La ville n'existe pas
				// Insertion de la ville dans la table Ville
				requete = "INSERT INTO ville VALUES (NULL,'"+ville+"','"+codePostal+"');";
				stmt.executeUpdate(requete);
				System.out.println(requete);
				// Insertion de la ville dans la table Adresse
				requete = "INSERT INTO adresse VALUES (NULL,'"+voie+"','"+numVoie+"',(SELECT idville FROM ville WHERE ville='"+ville+"'));";
				stmt.executeUpdate(requete);
				System.out.println(requete);
			} else {
			// La ville Existe
			// Ajout d'une adresse dans la Table adresse avec l'idville existant
			requete = "INSERT INTO adresse VALUES (NULL,'"+voie+"','"+numVoie+"',(SELECT idville FROM ville WHERE ville='"+ville+"'));";
			stmt.executeUpdate(requete);
			System.out.println(requete);
			}
 
			//Requete d'insertion dans la table Etudiants
			requete="INSERT INTO etudiants VALUES ('"+numeroEtudiant+"','"+nom+"','"+prenom+"',(SELECT idadresse FROM adresse WHERE voie = '"+voie+"' AND numVoie = '"+numVoie+"'));";
			stmt.executeUpdate(requete);
			System.out.println(requete);
 
			//deconnexion
			con.close();
			System.out.println("Deconnecté");
 
			fenetre.getLabel3().setText("La requete d'insertion d'un étudiant a été effectué avec succès");
 
		}catch (Exception e){
			e.printStackTrace();
		}
	}
}
Mais a ce niveau la dans la console il me sort :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
--------------------Configuration: <Default>--------------------
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at ExecutionRequete.actionPerformed(ExecutionRequete.java:29)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:5501)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
    at java.awt.Component.processEvent(Component.java:5266)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3968)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1778)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Donc pour récapituler :

GestionSQLFenetre -> Appuie sur le bouton -> ExecutionRequete -> CreationEtudiant mais a ce dernier niveau cela ne fonctionne donc pas.
Le seul moyen que j'ai trouver de faire fonctionner mon code CreationEtudiant et de mettre directement la class dans GestionSQLFentre

et donc de l'appeller depuis ExecutionRequete comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
//........
 
private GestionSQLFenetre fenetre;
 
//..........
 
fenetre.CreationEtudiant();
Et la cela fonctionne mais ayant une 50aine de code de la même taille cela serai le bordel de toute mettre direct dedans.