Bonjour,

Je souhaiterais créer "un programme d'installation" similaire à Inno Setup pour débuter avec l'interface graphique en Java.

J'ai deux classes PanelOuverture et PanelAccord héritant de JPanel dans ma JFrame. Lors du lancement du programme c'est PanelOuverture qui sera affiché sur la fenêtre, lorsque l'utilisateur appuie sur le bouton Installer on change de fenêtre et lorsqu'on appuie sur Annuler on quitte le programme.

Le problème est que lorsque j'appuie sur le bouton Installer, mon programme bloque (comme s'il y avait une boucle infinie) et je suis obligé d'appuyer sur la croix pour fermer la fenêtre. Aucun code d'erreur n'apparaît dans la console.

Mon erreur est situé dans ce bloque de ma JFrame :
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
	public void actionPerformed(ActionEvent quelBouton) {
		if(quelBouton.getSource() == boutonInstaller){
			labelInstallation.setText("Vous avez appuyé sur Installer"); // ERREUR SANS CETTE INSTRUCTION
			this.setContentPane(this.monPanelAccord);
		}
 
		else if(quelBouton.getSource() == boutonAnnuler){
			this.dispose();
		}
 
		else if(quelBouton.getSource() == boutonPrecedent){
			labelAccord.setText("Vous avez appuyé sur Précédent"); // ERREUR SANS CETTE INSTRUCTION
			this.setContentPane(monPanelOuverture);
		}
	}

Pour que mon programme fonctionne, je dois bizarrement remettre des setText() à mes Label, si je ne les remets pas, mon programme plante.
Le problème persiste même si j'initialise mes JLabel dans la déclaration des attributs de la JFrame au lieu des JPanel.
Pourquoi mon programme plante à cause de cela ?
Que dois-je faire pour que cela s'arrange ?




Voici le code de mon JFrame :
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
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
class Fenetre extends JFrame implements ActionListener{
	private PanelOuverture monPanelOuverture;
	private PanelAccord monPanelAccord;
	private JButton boutonInstaller = new JButton("Installer");
	private JButton boutonAnnuler = new JButton("Annuler");
	private JButton boutonAccepter = new JButton("Accepter");
	private JButton boutonPrecedent = new JButton("Précédent");
	private JLabel labelInstallation = new JLabel();
	private JLabel labelAccord = new JLabel();
 
 
	public Fenetre(){
		// Mettre à l'écoute les composants bouton
		boutonInstaller.addActionListener(this);
		boutonAnnuler.addActionListener(this);
		boutonAccepter.addActionListener(this);
		boutonPrecedent.addActionListener(this);
 
 
        this.setTitle("Programme d'installation");
        this.setSize(400, 400); 
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false); 
 
        //Initialiser mes fenêtres au démarrage :
        this.monPanelOuverture = new PanelOuverture(boutonInstaller, boutonAnnuler, labelInstallation);
        this.monPanelAccord = new PanelAccord(boutonAccepter, boutonPrecedent, labelAccord);
 
        this.setContentPane(monPanelOuverture);
        this.setVisible(true);
	}
 
 
	public void actionPerformed(ActionEvent quelBouton) {
		if(quelBouton.getSource() == boutonInstaller){
                // ERREUR ICI !!!
			this.setContentPane(this.monPanelAccord);
		}
 
		else if(quelBouton.getSource() == boutonAnnuler){
			this.dispose();
		}
 
		else if(quelBouton.getSource() == boutonPrecedent){
			this.setContentPane(monPanelOuverture);
		}
	}
}

Le code de mon PanelOuverture :
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
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
 
class PanelOuverture extends JPanel {
	public PanelOuverture(JButton boutonInstaller, JButton boutonAnnuler, JLabel labelInstallation){	
		this.setLayout(null); // On précise ne pas utiliser de Layout
		boutonInstaller.setBounds(100, 300, 100, 30);
		boutonAnnuler.setBounds(220, 300, 100, 30);
 
		labelInstallation.setText("Bonjour, vous êtes sur le point d'installer un logiciel");
		labelInstallation.setBounds(10, 50, 300, 100);
 
		this.add(boutonInstaller);
		this.add(boutonAnnuler);
		this.add(labelInstallation);
	}
}

Le code de mon PanelAccord :
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
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
class PanelAccord extends JPanel{
 
	public PanelAccord(JButton boutonAccepter, JButton boutonPrecent, JLabel labelAccord){	
		this.setLayout(null); // On précise ne pas utiliser de Layout
		boutonAccepter.setBounds(100, 300, 100, 30);
		boutonPrecent.setBounds(220, 300, 100, 30);
 
		labelAccord.setText("Acceptez vous les termes du contrat ?");
		labelAccord.setBounds(10, 50, 300, 100);
 
		this.add(boutonAccepter);
		this.add(boutonPrecent);
		this.add(labelAccord);
	}
}

Je vous remercie pour votre aide !