Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction getNames() de Container

4 réponses
Avatar
Kerroch
Bonjour à tous ,

Je me disais que pour avoir accès à n'importe quel object d'un Frame,il me
suffisait de
passer le Container, dans le constructeur des classes écouteur ,de chaque
objet.

et ainsi j'ai essayé de récupérer le nom de tous les objets présent dans le
container par la fonction getName().

Je m'aperçois que ça ne marche pas ....la fonction me renvoie "NULL" ,
Pourquoi???

Voici un bout de code pour illustrer mon propos :

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class Ecouteur5 implements ActionListener
{ public Ecouteur5(Container contenu)
{ this.contenu=contenu;
}
public void actionPerformed( ActionEvent ev){
int nbComposant=contenu.getComponentCount();
Component [] tabComposant= new Component[nbComposant];
tabComposant=contenu.getComponents();
for (int i=0;i<nbComposant;i++)
System.out.println("Composant:"+i+"
"+tabComposant[i].getName());
}
private Container contenu ;
}
class Ecran extends JFrame implements ActionListener
{ public Ecran()
{
Bouton5=new JButton("<5>");
Bouton6=new JButton("<6>");
getContentPane().setLayout(new FlowLayout());
getContentPane().add(Bouton5);
getContentPane().add(Bouton6);
Bouton5.addActionListener(new Ecouteur5(getContentPane()));
Bouton6.addActionListener(this);
}
public void actionPerformed( ActionEvent ev){}
private JButton Bouton5,Bouton6;
}
public class EssaiEcouteur
{
public static void main (String args[])
{ Ecran fen = new Ecran();
fen.setSize(500,200);
fen.setTitle("Ecran Principal");
fen.setVisible(true);

}

4 réponses

Avatar
jocelyn
Salut !

J'ai teste ton programme et il marche bien en lui-meme....
Simplement, je pense qu'il y a une confusion en ce qui concerne la methode
getName() de Component. En effet, si tu ne fais pas un setName() d'abord sur
un composant, la valeur de l'attribut sera nulle. Tu peux t'en convaincre en
faisant un setName("toto") sur un des boutons dans ton programme. En fait il
faudrait que nous sachions ce que tu veux reellement identifier pour voir
quelle methode adopter.

++

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même

"Kerroch" a écrit dans le message news:
c5gmqf$16j$
Bonjour à tous ,

Je me disais que pour avoir accès à n'importe quel object d'un Frame,il me
suffisait de
passer le Container, dans le constructeur des classes écouteur ,de chaque
objet.

et ainsi j'ai essayé de récupérer le nom de tous les objets présent dans
le

container par la fonction getName().

Je m'aperçois que ça ne marche pas ....la fonction me renvoie "NULL" ,
Pourquoi???

Voici un bout de code pour illustrer mon propos :

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class Ecouteur5 implements ActionListener
{ public Ecouteur5(Container contenu)
{ this.contenu=contenu;
}
public void actionPerformed( ActionEvent ev){
int nbComposant=contenu.getComponentCount();
Component [] tabComposant= new Component[nbComposant];
tabComposant=contenu.getComponents();
for (int i=0;i<nbComposant;i++)
System.out.println("Composant:"+i+"
"+tabComposant[i].getName());
}
private Container contenu ;
}
class Ecran extends JFrame implements ActionListener
{ public Ecran()
{
Bouton5=new JButton("<5>");
Bouton6=new JButton("<6>");
getContentPane().setLayout(new FlowLayout());
getContentPane().add(Bouton5);
getContentPane().add(Bouton6);
Bouton5.addActionListener(new Ecouteur5(getContentPane()));
Bouton6.addActionListener(this);
}
public void actionPerformed( ActionEvent ev){}
private JButton Bouton5,Bouton6;
}
public class EssaiEcouteur
{
public static void main (String args[])
{ Ecran fen = new Ecran();
fen.setSize(500,200);
fen.setTitle("Ecran Principal");
fen.setVisible(true);

}




Avatar
Kerroch
ok , je croyais que getName() renvoyait le nom du bouton donné à la
création, soit Bouton5 ou Bouton6 dans notre cas.
ainsi si je fais:
System.out.println("Composant:"+i+" "+tabComposant[i]);
j'obtiens bien la référence à Bouton5 et Bouton6 mais il n'est mentionné
nulle part lequel est Bouton5 ou Bouton6...
Si je veux rendre le bouton 6 invisible comment je sais quel indice du
tableau tabComposant
concerne Bouton 6??
en fait

au lieu de faire tabComposant[1].setVisible(false) ;
j'aurai voulu faire Bouton6.setVisible(false);

Et dès qu'on ajoute un composant dans le Container comment se range t-il ..à
la suite des autres ?


Si ma question n'est pas assez claire , c'est pas grave je vais creuser le
problème et essayer
de reformuler ma question ultérieurement.

merci pour votre aide.
Kerroch


"jocelyn" a écrit dans le message de
news:c5gnnl$si9$
Salut !

J'ai teste ton programme et il marche bien en lui-meme....
Simplement, je pense qu'il y a une confusion en ce qui concerne la methode
getName() de Component. En effet, si tu ne fais pas un setName() d'abord
sur

un composant, la valeur de l'attribut sera nulle. Tu peux t'en convaincre
en

faisant un setName("toto") sur un des boutons dans ton programme. En fait
il

faudrait que nous sachions ce que tu veux reellement identifier pour voir
quelle methode adopter.

++

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à
ne

pas devenir un monstre lui-même

"Kerroch" a écrit dans le message news:
c5gmqf$16j$
Bonjour à tous ,

Je me disais que pour avoir accès à n'importe quel object d'un Frame,il
me


suffisait de
passer le Container, dans le constructeur des classes écouteur ,de
chaque


objet.

et ainsi j'ai essayé de récupérer le nom de tous les objets présent dans
le

container par la fonction getName().

Je m'aperçois que ça ne marche pas ....la fonction me renvoie "NULL" ,
Pourquoi???

Voici un bout de code pour illustrer mon propos :

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class Ecouteur5 implements ActionListener
{ public Ecouteur5(Container contenu)
{ this.contenu=contenu;
}
public void actionPerformed( ActionEvent ev){
int nbComposant=contenu.getComponentCount();
Component [] tabComposant= new Component[nbComposant];
tabComposant=contenu.getComponents();
for (int i=0;i<nbComposant;i++)
System.out.println("Composant:"+i+"
"+tabComposant[i].getName());
}
private Container contenu ;
}
class Ecran extends JFrame implements ActionListener
{ public Ecran()
{
Bouton5=new JButton("<5>");
Bouton6=new JButton("<6>");
getContentPane().setLayout(new FlowLayout());
getContentPane().add(Bouton5);
getContentPane().add(Bouton6);
Bouton5.addActionListener(new Ecouteur5(getContentPane()));
Bouton6.addActionListener(this);
}
public void actionPerformed( ActionEvent ev){}
private JButton Bouton5,Bouton6;
}
public class EssaiEcouteur
{
public static void main (String args[])
{ Ecran fen = new Ecran();
fen.setSize(500,200);
fen.setTitle("Ecran Principal");
fen.setVisible(true);

}








Avatar
jocelyn
Effectivement c'est pas hyper-clair :)
J'ai l'impression que tu veux rendre des boutons visibles ou pas depuis
l'exterieur du JPanel qui les contient....
En fait moi quand j'ai a gerer ce genre de cas de figure (courant il est
vrai), j'essaie de raisonner en termes d'etats de mon ecran.
Par exemple, imaginons que l'ecran represente par le jPanel puisse prendre 3
etats differents en fonction d'un certains nombre de parametres exterieurs,
et que selon cet etat, des composant soient visibles ou non, actifs ou non,
etc....
Je procede en gros ainsi: je declare un certains nombre d'etats dans mon
JPanel, et une variable qui memorise l'etat courant de l'ecran:
public Ecran extends JPanel {
public static final int ETAT1 = 1;
public static final int ETAT2 = 2;
public static final int ETAT3 = 3;

private int etatCourant;

public void changeEtat(int pNouvelEtat) {
// Verifier d'abord que le nouvel etat est correct
...
// Ensuite en fonction du nouvel etat (et eventuellement de
l'ancien), on met a jour l'ecran
switch (pNouvelEtat) {
case ETAT1:
.....
break;
case ETAT2:
....
break;
case ETAT3:
......
break;
}
}
}

Les puristes pourront blinder le truc avec des patterns permettant de faire
des enumerations mais moi je me contente de ca :)

Pour ta 2eme question, quand le layout est un flowLayout, les composants
sont simplement ajoutes dans l'ordre des add de ton code.

a+
--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
Avatar
Kerroch
Merci pour ta réponse , je comprend la manière dont tu procède
pour mettre à jour ton écran.
je suppose que tu valides l'état de ton écran en scanant tous les
composants .

Ma question était plus sur les relations entre composants dans l'écran
Comment en agissant sur un composant (clic Bouton5) je pouvais agir sur
tous les autres composants qui ne sont pas forcement publics....

Je crois que je vais méditer un peu plus sur ce sujet et te remercie
beaucoup
d'avoir essayer de m'aider.

à bientôt
Kerroch





"jocelyn" a écrit dans le message de
news:c5gshq$h7h$
Effectivement c'est pas hyper-clair :)
J'ai l'impression que tu veux rendre des boutons visibles ou pas depuis
l'exterieur du JPanel qui les contient....
En fait moi quand j'ai a gerer ce genre de cas de figure (courant il est
vrai), j'essaie de raisonner en termes d'etats de mon ecran.
Par exemple, imaginons que l'ecran represente par le jPanel puisse prendre
3

etats differents en fonction d'un certains nombre de parametres
exterieurs,

et que selon cet etat, des composant soient visibles ou non, actifs ou
non,

etc....
Je procede en gros ainsi: je declare un certains nombre d'etats dans mon
JPanel, et une variable qui memorise l'etat courant de l'ecran:
public Ecran extends JPanel {
public static final int ETAT1 = 1;
public static final int ETAT2 = 2;
public static final int ETAT3 = 3;

private int etatCourant;

public void changeEtat(int pNouvelEtat) {
// Verifier d'abord que le nouvel etat est correct
...
// Ensuite en fonction du nouvel etat (et eventuellement de
l'ancien), on met a jour l'ecran
switch (pNouvelEtat) {
case ETAT1:
.....
break;
case ETAT2:
....
break;
case ETAT3:
......
break;
}
}
}

Les puristes pourront blinder le truc avec des patterns permettant de
faire

des enumerations mais moi je me contente de ca :)

Pour ta 2eme question, quand le layout est un flowLayout, les composants
sont simplement ajoutes dans l'ordre des add de ton code.

a+
--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à
ne

pas devenir un monstre lui-même