Récupérer le contenu d'un JPanel

siouip Messages postés 1 Date d'inscription samedi 10 août 2013 Statut Membre Dernière intervention 10 août 2013 - 10 août 2013 à 14:55
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 - 12 août 2013 à 10:25
Bonjour,

Voici plusieurs jours que je cherche sans trouver la résolution à mon problème.
J'ai un JPanel "contenu" dans lequel j'ajoute ou je retire d'autres JPanel en fonction du nombre d'éléments que je souhaite afficher. Mon problème est que j'ajoute plusieurs fois un JPanel mais avec le même nom du coup lorsque je veux récupérer le contenu des éléments du JPanel je ne récupère que le dernier ajouté et pas ceux d'avant.

J'espère avoir été suffisamment clair. Vous trouverez ci-dessous l'extrait de mon code source qui me pose problème.

Le code est situé dans un JDialog.
nbSsProduit est une JComboBox me permettant de savoir combien de case je vais afficher.

nbSsProduit.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				contenu.removeAll();
				contenu.add(panNom);
				contenu.add(panPrix);
				contenu.add(panPartVendeur);
				contenu.add(panStatut);
				contenu.add(panNbSsProduit);
				for(int i = 0 ; i <(Integer) nbSsProduit.getSelectedItem(); i++) {
					String pan=new String("panSsProduit"+i);
					//Ss produit
					JPanel panSsProduit1=new JPanel(new FlowLayout(FlowLayout.LEFT));
					panSsProduit1.setPreferredSize(new Dimension(320,60));
					ssProduit1=new JComboBox(produit.getNomProduit());
					ssProduit1.setPreferredSize(new Dimension (225,30));
					ssProduit1.setName("ssProduit"+i);
					panSsProduit1.setBorder(BorderFactory.createTitledBorder("Nom du sous-produit :"));
					panSsProduit1.add(ssProduit1);
					
					
					//Unite de stock
					JPanel panUS1=new JPanel(new FlowLayout(FlowLayout.LEFT));
					panUS1.setPreferredSize(new Dimension(320,60));
					US1=new JFormattedTextField(NumberFormat.getIntegerInstance());
					US1.setValue(1);
					US1.setPreferredSize(new Dimension (225,30));
					US1.setName("US"+i);
					panUS1.setBorder(BorderFactory.createTitledBorder("Nombre d'unité de stock :"));
					panUS1.add(US1);
					contenu.add(panSsProduit1);
					contenu.add(panUS1);
				}
				contenu.revalidate();
			}
		});


et là mon problème est de récupérer le contenu des différents ssProduit1 et US1
car en mettant ssProduit1.getText() et US1.getValue() je n'ai que les valeurs du dernier ajout.

Merci beaucoup pour votre aide.

1 réponse

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 août 2013 à 10:25
:'( je dois tout recommencer mauvaise manip... ça risque d'être moins pousser comme réponse alors... donc je disais:

Salut,

Comme cela je pense que crée ton composant est la meilleure optique: tu crées une classe (par exemple MyPane) qui étend la classe JPanel et dans son constructeur, tu fais tout ton boulot d'ajout de composant (combo et textfield).
L'instance nouvellement crée de ta classe MyPane est ensuite ajoutée à ton composant principal (contenu).

Lorsque tu veux récupérer les valeurs de tes champs, tu parcours le contenu de ton panneau principal (contenu) et lorsque tu trouves un composant de type MyPane ( utilise instanceof ) tu lui demande la valeur des champ via des getters.

Je ne sais pas si c'est clair, mais j'ai pas le courage de retaper tout le code :-D

au besoin, n'hésite pas à demander des éclaircissements.
--
0
Rejoignez-nous