Bon je vais essayer de faire clair, mais je suis relativement débutant en
java, et je commence à patauger dans mon propre code...
Voilà je fais un programme avec une Frame Principale sur laquelle je
souhaite créer des boutons créés à partir d'une fonction d'une classe
contenue dans le programme:
Je donne un exemple en gros, ce que j'aimerais c'est que ces boutons créés
par le programme lance une fonction avec comme paramètres la valeur de ce
bouton:
performClic(String nomButton).
Or cette fonction devrait se trouver dans la classe principale de mon
programme mais être appelée par ma classe PowerButton.
Ca donne en gros:
public class PowerButton extends Button implements MouseListener {
public void mousePressed (MouseEvent e){
}
public class CreateurBoutons {
...
/* Fonction qui crée plusieurs boutons empilés dans un vecteur */
Vector generateButtons() { ... }
}
class Mainprog {
CreateurBoutons B = new CreateurBoutons()
Frame FrameProg = new Frame()
...
/* Exemple de récupération d'un bouton */
FrameProg.add (PowerButon)B.generateButtons().get(0);
}
Bon tout ceci n'est pas très clair, mais si quelqu'un a compris même de loin
de quoi je voulais parler, je lui serait reconnaissant d'éclairer ma
lanterne, même si c'est une question réthorique et/ou de débutant qui aurait
du lire les docs avant de venir poster ici, merci.
Si vous voulez plus d'éclaircissements sur un point, je peux essayer de
m'expliquer mieux...
L.
Bon je vais essayer de faire clair, mais je suis relativement débutant en
java, et je commence à patauger dans mon propre code...
Voilà je fais un programme avec une Frame Principale sur laquelle je
souhaite créer des boutons créés à partir d'une fonction d'une classe
contenue dans le programme:
Je donne un exemple en gros, ce que j'aimerais c'est que ces boutons créés
par le programme lance une fonction avec comme paramètres la valeur de ce
bouton:
performClic(String nomButton).
Or cette fonction devrait se trouver dans la classe principale de mon
programme mais être appelée par ma classe PowerButton.
Ca donne en gros:
public class PowerButton extends Button implements MouseListener {
public void mousePressed (MouseEvent e){
}
public class CreateurBoutons {
...
/* Fonction qui crée plusieurs boutons empilés dans un vecteur */
Vector generateButtons() { ... }
}
class Mainprog {
CreateurBoutons B = new CreateurBoutons()
Frame FrameProg = new Frame()
...
/* Exemple de récupération d'un bouton */
FrameProg.add (PowerButon)B.generateButtons().get(0);
}
Bon tout ceci n'est pas très clair, mais si quelqu'un a compris même de loin
de quoi je voulais parler, je lui serait reconnaissant d'éclairer ma
lanterne, même si c'est une question réthorique et/ou de débutant qui aurait
du lire les docs avant de venir poster ici, merci.
Si vous voulez plus d'éclaircissements sur un point, je peux essayer de
m'expliquer mieux...
L.
Bon je vais essayer de faire clair, mais je suis relativement débutant en
java, et je commence à patauger dans mon propre code...
Voilà je fais un programme avec une Frame Principale sur laquelle je
souhaite créer des boutons créés à partir d'une fonction d'une classe
contenue dans le programme:
Je donne un exemple en gros, ce que j'aimerais c'est que ces boutons créés
par le programme lance une fonction avec comme paramètres la valeur de ce
bouton:
performClic(String nomButton).
Or cette fonction devrait se trouver dans la classe principale de mon
programme mais être appelée par ma classe PowerButton.
Ca donne en gros:
public class PowerButton extends Button implements MouseListener {
public void mousePressed (MouseEvent e){
}
public class CreateurBoutons {
...
/* Fonction qui crée plusieurs boutons empilés dans un vecteur */
Vector generateButtons() { ... }
}
class Mainprog {
CreateurBoutons B = new CreateurBoutons()
Frame FrameProg = new Frame()
...
/* Exemple de récupération d'un bouton */
FrameProg.add (PowerButon)B.generateButtons().get(0);
}
Bon tout ceci n'est pas très clair, mais si quelqu'un a compris même de loin
de quoi je voulais parler, je lui serait reconnaissant d'éclairer ma
lanterne, même si c'est une question réthorique et/ou de débutant qui aurait
du lire les docs avant de venir poster ici, merci.
Si vous voulez plus d'éclaircissements sur un point, je peux essayer de
m'expliquer mieux...
L.
Linio wrote:Bon je vais essayer de faire clair, mais je suis relativement débutant
en
java, et je commence à patauger dans mon propre code...
Voilà je fais un programme avec une Frame Principale sur laquelle je
souhaite créer des boutons créés à partir d'une fonction d'une classe
contenue dans le programme:
Je donne un exemple en gros, ce que j'aimerais c'est que ces boutons
créés
par le programme lance une fonction avec comme paramètres la valeur de
ce
bouton:
performClic(String nomButton).
Or cette fonction devrait se trouver dans la classe principale de mon
programme mais être appelée par ma classe PowerButton.
Ca donne en gros:
public class PowerButton extends Button implements MouseListener {
public void mousePressed (MouseEvent e){
e.getSource() //pour récupérer le Button (n'oublie pas de faire un cast)
// Après tu peux utiliser la méthode getLabel pour savoir de quel bouton
// il s'agit, ou alors si ca ne te parait pas assez precis tu fais un
if( ((Button) e.getSource()).equals(MyPowerButton) ) {
}
else if( ((Button) e.getSource()).equals(MyOtherButton) ) {
}
else...
Un dernier point; Es tu sur que c'est bien un évènement souris qu'il est
le plus judicieux d'écouter ici ? De quelle action de quel objet veux tu
exactement lancer la création du bouton ?}
public class CreateurBoutons {
...
/* Fonction qui crée plusieurs boutons empilés dans un vecteur */
Vector generateButtons() { ... }
}
class Mainprog {
CreateurBoutons B = new CreateurBoutons()
Frame FrameProg = new Frame()
...
/* Exemple de récupération d'un bouton */
FrameProg.add (PowerButon)B.generateButtons().get(0);
}
Bon tout ceci n'est pas très clair, mais si quelqu'un a compris même de
loin
de quoi je voulais parler, je lui serait reconnaissant d'éclairer ma
lanterne, même si c'est une question réthorique et/ou de débutant qui
aurait
du lire les docs avant de venir poster ici, merci.
Si vous voulez plus d'éclaircissements sur un point, je peux essayer de
m'expliquer mieux...
L.
De rien,
Thibaut
Linio wrote:
Bon je vais essayer de faire clair, mais je suis relativement débutant
en
java, et je commence à patauger dans mon propre code...
Voilà je fais un programme avec une Frame Principale sur laquelle je
souhaite créer des boutons créés à partir d'une fonction d'une classe
contenue dans le programme:
Je donne un exemple en gros, ce que j'aimerais c'est que ces boutons
créés
par le programme lance une fonction avec comme paramètres la valeur de
ce
bouton:
performClic(String nomButton).
Or cette fonction devrait se trouver dans la classe principale de mon
programme mais être appelée par ma classe PowerButton.
Ca donne en gros:
public class PowerButton extends Button implements MouseListener {
public void mousePressed (MouseEvent e){
e.getSource() //pour récupérer le Button (n'oublie pas de faire un cast)
// Après tu peux utiliser la méthode getLabel pour savoir de quel bouton
// il s'agit, ou alors si ca ne te parait pas assez precis tu fais un
if( ((Button) e.getSource()).equals(MyPowerButton) ) {
}
else if( ((Button) e.getSource()).equals(MyOtherButton) ) {
}
else...
Un dernier point; Es tu sur que c'est bien un évènement souris qu'il est
le plus judicieux d'écouter ici ? De quelle action de quel objet veux tu
exactement lancer la création du bouton ?
}
public class CreateurBoutons {
...
/* Fonction qui crée plusieurs boutons empilés dans un vecteur */
Vector generateButtons() { ... }
}
class Mainprog {
CreateurBoutons B = new CreateurBoutons()
Frame FrameProg = new Frame()
...
/* Exemple de récupération d'un bouton */
FrameProg.add (PowerButon)B.generateButtons().get(0);
}
Bon tout ceci n'est pas très clair, mais si quelqu'un a compris même de
loin
de quoi je voulais parler, je lui serait reconnaissant d'éclairer ma
lanterne, même si c'est une question réthorique et/ou de débutant qui
aurait
du lire les docs avant de venir poster ici, merci.
Si vous voulez plus d'éclaircissements sur un point, je peux essayer de
m'expliquer mieux...
L.
De rien,
Thibaut
Linio wrote:Bon je vais essayer de faire clair, mais je suis relativement débutant
en
java, et je commence à patauger dans mon propre code...
Voilà je fais un programme avec une Frame Principale sur laquelle je
souhaite créer des boutons créés à partir d'une fonction d'une classe
contenue dans le programme:
Je donne un exemple en gros, ce que j'aimerais c'est que ces boutons
créés
par le programme lance une fonction avec comme paramètres la valeur de
ce
bouton:
performClic(String nomButton).
Or cette fonction devrait se trouver dans la classe principale de mon
programme mais être appelée par ma classe PowerButton.
Ca donne en gros:
public class PowerButton extends Button implements MouseListener {
public void mousePressed (MouseEvent e){
e.getSource() //pour récupérer le Button (n'oublie pas de faire un cast)
// Après tu peux utiliser la méthode getLabel pour savoir de quel bouton
// il s'agit, ou alors si ca ne te parait pas assez precis tu fais un
if( ((Button) e.getSource()).equals(MyPowerButton) ) {
}
else if( ((Button) e.getSource()).equals(MyOtherButton) ) {
}
else...
Un dernier point; Es tu sur que c'est bien un évènement souris qu'il est
le plus judicieux d'écouter ici ? De quelle action de quel objet veux tu
exactement lancer la création du bouton ?}
public class CreateurBoutons {
...
/* Fonction qui crée plusieurs boutons empilés dans un vecteur */
Vector generateButtons() { ... }
}
class Mainprog {
CreateurBoutons B = new CreateurBoutons()
Frame FrameProg = new Frame()
...
/* Exemple de récupération d'un bouton */
FrameProg.add (PowerButon)B.generateButtons().get(0);
}
Bon tout ceci n'est pas très clair, mais si quelqu'un a compris même de
loin
de quoi je voulais parler, je lui serait reconnaissant d'éclairer ma
lanterne, même si c'est une question réthorique et/ou de débutant qui
aurait
du lire les docs avant de venir poster ici, merci.
Si vous voulez plus d'éclaircissements sur un point, je peux essayer de
m'expliquer mieux...
L.
De rien,
Thibaut
Parfait, impeccable, merci!
Je connaissais pas cette méthode, donc j'étais un peu paumé avec mes objets
à droite à gauche.
Pour ce qui est de l'action que je veux écouter sur le bouton, c'est ben une
action n'importe laquelle mais comme à 99% ce sera un clic souris, et que
c'est le seul truc dans lequel je m'en sors...
L.
Parfait, impeccable, merci!
Je connaissais pas cette méthode, donc j'étais un peu paumé avec mes objets
à droite à gauche.
Pour ce qui est de l'action que je veux écouter sur le bouton, c'est ben une
action n'importe laquelle mais comme à 99% ce sera un clic souris, et que
c'est le seul truc dans lequel je m'en sors...
L.
Parfait, impeccable, merci!
Je connaissais pas cette méthode, donc j'étais un peu paumé avec mes objets
à droite à gauche.
Pour ce qui est de l'action que je veux écouter sur le bouton, c'est ben une
action n'importe laquelle mais comme à 99% ce sera un clic souris, et que
c'est le seul truc dans lequel je m'en sors...
L.
C'est la méthode normale d'écoute d'evenements bouton (enfin je pense
:-p, si quelqu'un fait autrement qu'il le dise maintenant ou se taise à
jamais).
C'est la méthode normale d'écoute d'evenements bouton (enfin je pense
:-p, si quelqu'un fait autrement qu'il le dise maintenant ou se taise à
jamais).
C'est la méthode normale d'écoute d'evenements bouton (enfin je pense
:-p, si quelqu'un fait autrement qu'il le dise maintenant ou se taise à
jamais).
Autre détail, pour tester l'égalité de deux chaines de caractères, en
général, on utilise
"boutonOk".equals(e.getActionCommand())
plutôt que
e.getActionCommand().compareTo("boutonAnnuler") == 0
Les deux marchent, mais la première écriture est plus compacte, plus
directe, et ne génère jamais de NullPointerException. ;)
-- Thomas
Autre détail, pour tester l'égalité de deux chaines de caractères, en
général, on utilise
"boutonOk".equals(e.getActionCommand())
plutôt que
e.getActionCommand().compareTo("boutonAnnuler") == 0
Les deux marchent, mais la première écriture est plus compacte, plus
directe, et ne génère jamais de NullPointerException. ;)
-- Thomas
Autre détail, pour tester l'égalité de deux chaines de caractères, en
général, on utilise
"boutonOk".equals(e.getActionCommand())
plutôt que
e.getActionCommand().compareTo("boutonAnnuler") == 0
Les deux marchent, mais la première écriture est plus compacte, plus
directe, et ne génère jamais de NullPointerException. ;)
-- Thomas
En effet, mais utiliser la méthode equals pour les chaines de caracteres
n'est pas une bonne habitude à prendre car on perd le sens de "equals" à
mon avis.
Normallement equals permet de tester les adresses mémoire de deux objets
pour savoir si on à affaire au même objet ou non.
Or, ici on teste une chaine de caractere avec une autre chaine que l'on
crée pour l'occasion, ce qui devrait en toute logique renvoyer false
tout le temps.
Je ne sais pas pourquoi celà marche tout de même, et j'irais même
jusqu'à dire que moi d'habitude j'utilise
if( e.getActionCommand() == "boutonOk" )
En effet, mais utiliser la méthode equals pour les chaines de caracteres
n'est pas une bonne habitude à prendre car on perd le sens de "equals" à
mon avis.
Normallement equals permet de tester les adresses mémoire de deux objets
pour savoir si on à affaire au même objet ou non.
Or, ici on teste une chaine de caractere avec une autre chaine que l'on
crée pour l'occasion, ce qui devrait en toute logique renvoyer false
tout le temps.
Je ne sais pas pourquoi celà marche tout de même, et j'irais même
jusqu'à dire que moi d'habitude j'utilise
if( e.getActionCommand() == "boutonOk" )
En effet, mais utiliser la méthode equals pour les chaines de caracteres
n'est pas une bonne habitude à prendre car on perd le sens de "equals" à
mon avis.
Normallement equals permet de tester les adresses mémoire de deux objets
pour savoir si on à affaire au même objet ou non.
Or, ici on teste une chaine de caractere avec une autre chaine que l'on
crée pour l'occasion, ce qui devrait en toute logique renvoyer false
tout le temps.
Je ne sais pas pourquoi celà marche tout de même, et j'irais même
jusqu'à dire que moi d'habitude j'utilise
if( e.getActionCommand() == "boutonOk" )
On Wed, 27 Oct 2004 09:55:29 +0200, Thibaut Desmarest wrote:En effet, mais utiliser la méthode equals pour les chaines de caracteres
n'est pas une bonne habitude à prendre car on perd le sens de "equals" à
mon avis.
Heu .... je deviens con ou tu me dit que equals() ne sert pas à tester
l'égalité?
Normallement equals permet de tester les adresses mémoire de deux objets
pour savoir si on à affaire au même objet ou non.
Pour tester si deux références pointent sur le même objet, on utilise
l'opérateur = > Pour tester si deux objets *distincts* ont la même valeur, on utilise
equals().
Dans le cas de la classe String, la méthode equals() fait une comparaison
caractère par caractère.
Or, ici on teste une chaine de caractere avec une autre chaine que l'on
crée pour l'occasion, ce qui devrait en toute logique renvoyer false
tout le temps.
En comparant avec == oui
En comparant avec equals, nonJe ne sais pas pourquoi celà marche tout de même, et j'irais même
jusqu'à dire que moi d'habitude j'utilise
if( e.getActionCommand() == "boutonOk" )
Ca marche uniquement si l'initialisation du bouton et la gestion des
évènements se font dans la même classe.
En effet, le compilateur "factorise" les littéraux qui apparaissent dans
le code. Si la chaine de caractère "boutonOk" apparait plusieurs fois
dans le .java, un seul objet String sera généré dans le .class
Tu te reposes sur une optimisation du compilateur, et tu va avoir une
mauvaise surprise le jour où tu changera de compilo.
On Wed, 27 Oct 2004 09:55:29 +0200, Thibaut Desmarest wrote:
En effet, mais utiliser la méthode equals pour les chaines de caracteres
n'est pas une bonne habitude à prendre car on perd le sens de "equals" à
mon avis.
Heu .... je deviens con ou tu me dit que equals() ne sert pas à tester
l'égalité?
Normallement equals permet de tester les adresses mémoire de deux objets
pour savoir si on à affaire au même objet ou non.
Pour tester si deux références pointent sur le même objet, on utilise
l'opérateur = > Pour tester si deux objets *distincts* ont la même valeur, on utilise
equals().
Dans le cas de la classe String, la méthode equals() fait une comparaison
caractère par caractère.
Or, ici on teste une chaine de caractere avec une autre chaine que l'on
crée pour l'occasion, ce qui devrait en toute logique renvoyer false
tout le temps.
En comparant avec == oui
En comparant avec equals, non
Je ne sais pas pourquoi celà marche tout de même, et j'irais même
jusqu'à dire que moi d'habitude j'utilise
if( e.getActionCommand() == "boutonOk" )
Ca marche uniquement si l'initialisation du bouton et la gestion des
évènements se font dans la même classe.
En effet, le compilateur "factorise" les littéraux qui apparaissent dans
le code. Si la chaine de caractère "boutonOk" apparait plusieurs fois
dans le .java, un seul objet String sera généré dans le .class
Tu te reposes sur une optimisation du compilateur, et tu va avoir une
mauvaise surprise le jour où tu changera de compilo.
On Wed, 27 Oct 2004 09:55:29 +0200, Thibaut Desmarest wrote:En effet, mais utiliser la méthode equals pour les chaines de caracteres
n'est pas une bonne habitude à prendre car on perd le sens de "equals" à
mon avis.
Heu .... je deviens con ou tu me dit que equals() ne sert pas à tester
l'égalité?
Normallement equals permet de tester les adresses mémoire de deux objets
pour savoir si on à affaire au même objet ou non.
Pour tester si deux références pointent sur le même objet, on utilise
l'opérateur = > Pour tester si deux objets *distincts* ont la même valeur, on utilise
equals().
Dans le cas de la classe String, la méthode equals() fait une comparaison
caractère par caractère.
Or, ici on teste une chaine de caractere avec une autre chaine que l'on
crée pour l'occasion, ce qui devrait en toute logique renvoyer false
tout le temps.
En comparant avec == oui
En comparant avec equals, nonJe ne sais pas pourquoi celà marche tout de même, et j'irais même
jusqu'à dire que moi d'habitude j'utilise
if( e.getActionCommand() == "boutonOk" )
Ca marche uniquement si l'initialisation du bouton et la gestion des
évènements se font dans la même classe.
En effet, le compilateur "factorise" les littéraux qui apparaissent dans
le code. Si la chaine de caractère "boutonOk" apparait plusieurs fois
dans le .java, un seul objet String sera généré dans le .class
Tu te reposes sur une optimisation du compilateur, et tu va avoir une
mauvaise surprise le jour où tu changera de compilo.
Peut être que la méthode equals() a été surchargée dans la classe
String, mais de base, elle fait un == il me semble et ce serait de là
que viendrait ma confusion ?
Merci de m'avoir enfin donné la réponse à cette question ! Depuis le
temps que je me demandais pourquoi ça marchait ;) C'est bon à
savoir...
Pour le equals() je pense qu'on a peut être un peu raison tous les
deux, ca doit faire un == de base (d'où ma confusion). Sauf dans la
plupart des classes de Sun ou elle a été surchargée pour faire une
vraie comparaison entre deux objets mémoire distincts... Donc si
j'utilise le equals() avec des classes perso où je n'ai pas surchargé
la méthode ca fait bien l'équivalent d'un == mais en carrément moins
propre...
Dis moi si tu es d'accord avec mes raisonnements, je pense que j'ai du
code à nettoyer ;)
Peut être que la méthode equals() a été surchargée dans la classe
String, mais de base, elle fait un == il me semble et ce serait de là
que viendrait ma confusion ?
Merci de m'avoir enfin donné la réponse à cette question ! Depuis le
temps que je me demandais pourquoi ça marchait ;) C'est bon à
savoir...
Pour le equals() je pense qu'on a peut être un peu raison tous les
deux, ca doit faire un == de base (d'où ma confusion). Sauf dans la
plupart des classes de Sun ou elle a été surchargée pour faire une
vraie comparaison entre deux objets mémoire distincts... Donc si
j'utilise le equals() avec des classes perso où je n'ai pas surchargé
la méthode ca fait bien l'équivalent d'un == mais en carrément moins
propre...
Dis moi si tu es d'accord avec mes raisonnements, je pense que j'ai du
code à nettoyer ;)
Peut être que la méthode equals() a été surchargée dans la classe
String, mais de base, elle fait un == il me semble et ce serait de là
que viendrait ma confusion ?
Merci de m'avoir enfin donné la réponse à cette question ! Depuis le
temps que je me demandais pourquoi ça marchait ;) C'est bon à
savoir...
Pour le equals() je pense qu'on a peut être un peu raison tous les
deux, ca doit faire un == de base (d'où ma confusion). Sauf dans la
plupart des classes de Sun ou elle a été surchargée pour faire une
vraie comparaison entre deux objets mémoire distincts... Donc si
j'utilise le equals() avec des classes perso où je n'ai pas surchargé
la méthode ca fait bien l'équivalent d'un == mais en carrément moins
propre...
Dis moi si tu es d'accord avec mes raisonnements, je pense que j'ai du
code à nettoyer ;)