Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java
Interfaces Graphiques en Java Forum d'entraide pour les interfaces graphiques en Java (Swing, AWT, JFace, SWT, Graphisme 2D et 3D, clients riches, ...). Avant de poster -> Les cours sur les Interfaces Graphiques - FAQ GUI Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/08/2012, 11h53   #1
NoNo282
Invité de passage
 
Homme
Étudiant
Inscription : août 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2012
Messages : 4
Points : 2
Points : 2
Par défaut Afficher des champs de textes en fonction d'un choix

Bonjour tout le monde,

Dans le cadre de mon TM, Travail de Maturité, je bosse actuellement sur un projet en Java, sur les générateurs de nombres aléatoires.

J'ai appris récemment le Java (donc encore très débutant), et je construit un GUI assez simple.

J'aimerais ceci : L'utilisateur a d'abord un choix à faire à l'aide du RadioButton. J'aimerais que certains champs de textes (deuxième choix) apparaissent ou pas en fonction du premier choix...
Ex. : imaginez que vous sélectionnez un monde de paiement par chèque --> alors les champs de texte destinés au mode "carte bancaire" se masquent ou ne sont plus accessible... Vous comprenez ?

Avec mes connaissances, j'ai pensé faire une classe interne qui "écoute" le choix du RadioButton, puis va faire (en fonction de ce choix) un "monChampAMasquer.setVisible(false)"... Mais ça ne fonctionne pas

Après renseignement, j'ai lu que la classe interne peut accéder au variable/objet déclarés "private" de la classe externe...


Voilà, j'espère que vous comprendrez et que vous pourrez m'aiguiller.

Le problème se situe à la dernière ligne.

Code :
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JRadioButton;
 
public class Fenetre extends JFrame implements ActionListener {
 
	// JPannels :
	private JPanel container = new JPanel();
	private JPanel ChoicePanel = new JPanel();
	private JPanel ResultsPanel = new JPanel();
 
	// RadioButton pour le choix de la méthode
	private JRadioButton choice1 = new JRadioButton("Carrés médians");
	private JRadioButton choice2 = new JRadioButton("Fibonacci");
	private JRadioButton choice3 = new JRadioButton("GCL");
	private JRadioButton choice4 = new JRadioButton("LFSR");
	// ButtonGroup
	private ButtonGroup bg1 = new ButtonGroup();
 
	// Button normal
	private JButton test = new JButton("Test");
 
	// Compteur
	private int compteur = 0;
 
	// Texte
	private JLabel label = new JLabel("0");
 
	public Fenetre() {
 
		this.setTitle("Générateur de nombres pseudo aléatoires");
		this.setSize(900, 600);
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
		// ContentPane : container
		container.setBackground(Color.ORANGE);
		container.setLayout(null);
		this.setContentPane(container);
 
		// JPanel des choix de l'utilisateur (méthode)
		ChoicePanel.setBackground(Color.blue);
		ChoicePanel.setLayout(new GridLayout(4, 1));
		ChoicePanel.setSize(new Dimension(150, 250));
		ChoicePanel.setLocation(0, 0);
		container.add(ChoicePanel);
		//
		choice1.addActionListener(new StateListener());
		choice2.addActionListener(new StateListener());
		choice3.addActionListener(new StateListener());
		choice4.addActionListener(new StateListener());
		//
		choice1.setMnemonic(1);
		choice2.setMnemonic(2);
		choice3.setMnemonic(3);
		choice4.setMnemonic(4);
		//
		ChoicePanel.add(choice1);
		ChoicePanel.add(choice2);
		ChoicePanel.add(choice3);
		ChoicePanel.add(choice4);
		//
		bg1.add(choice1);
		bg1.add(choice2);
		bg1.add(choice3);
		bg1.add(choice4);
 
		// JPannel des résultats
		ResultsPanel.setBackground(Color.red);
		ResultsPanel.setSize(new Dimension(150, 250));
		ResultsPanel.setLocation(400, 0);
		ResultsPanel.add(label);
		container.add(ResultsPanel);
 
		// Button "test"
		test.addActionListener(this);
		test.setSize(new Dimension(150, 250));
		test.setLocation(200, 0);
		container.add(test);
	}
 
	public void actionPerformed(ActionEvent arg0) {
		// Lorsque nous cliquons sur notre bouton, on met à jour le JLabel
		// this.compteur++;
		if (bg1.getSelection().getMnemonic() == 1) {
			label.setText("1");
		}
		if (bg1.getSelection().getMnemonic() == 2) {
 
			label.setText("2");
		}
		if (bg1.getSelection().getMnemonic() == 3) {
 
			label.setText("3");
		}
		if (bg1.getSelection().getMnemonic() == 4) {
 
			label.setText("4");
		}
		if (bg1.getSelection().getMnemonic() == 1) {
			test.setVisible(false);
		}
		// label.setText("Vous avez choisi " + bg1.getSelection());
	}
}
 
class StateListener implements ActionListener {
 
	public void actionPerformed(ActionEvent e) {
		System.out.println("source : "
				+ ((JRadioButton) e.getSource()).getText() + " - état : "
				+ ((JRadioButton) e.getSource()).isSelected());
 
	}
}
 
class ChoiceListener implements ActionListener {
 
	public void actionPerformed(ActionEvent e) {
		if (((JRadioButton) e.getSource()).isSelected() == true) {
			MonChampAMasquer.setVisible(false);
 
		}
	}
}
Merci beaucoup !
NoNo282 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2012, 13h11   #2
Mathieu.J
Modérateur
 
Homme Mathieu
Ingénieur développement logiciels
Inscription : avril 2004
Messages : 1 180
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2004
Messages : 1 180
Points : 1 829
Points : 1 829
Place tes listeners dans la classe Fenetre pas à l'extérieur.

De plus la variable "monChampAMasquer" n'existe pas.


Regarde du côté de CardLayout pour avoir des formulaires différents en fonction d'un critère.
Mathieu.J est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2012, 13h44   #3
NoNo282
Invité de passage
 
Homme
Étudiant
Inscription : août 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2012
Messages : 4
Points : 2
Points : 2
MERCI beaucoup, il fallait effectivement intégrer les listeners dans la classe Fenetre.

Concernant le "monChampAMasquer", c'était normal qu'il y en ai pas, c'était juste pour mettre en évidence.

Je vais plancher sur les CardLayout, encore merci mille fois


* Dois-je mettre ce sujet en résolu, ou le garder si j'ai d'autre questions plus tard ?
NoNo282 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2012, 18h16   #4
Mathieu.J
Modérateur
 
Homme Mathieu
Ingénieur développement logiciels
Inscription : avril 2004
Messages : 1 180
Détails du profil
Informations personnelles :
Nom : Homme Mathieu
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2004
Messages : 1 180
Points : 1 829
Points : 1 829
Marque le résolu et reviens sur un nouveau plus tard.
Le problème sera sûrement différent.
Mathieu.J est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h00.


 
 
 
 
Partenaires

Hébergement Web