Merci tails
En fait c'est comment connaitre la valeur d'une variable lorsqu'il s'agit d'une variable de type objet? Dans le but de detecter des erreurs comme dans ce cas là.Qu'entends-tu par là ? Un JButton est un composant : il a donc diverses propriétés (texte, couleur de fond, ...)
Tu ne peux pas, justement : tu es obligé d'interroger les différentes méthodes de l'objet.
Ainsi si tu veux connaitre le texte d'un JButton => bouton.getText(). Bien sûr, en supposant que le JButton se nomme bouton.
Bonsoir tout le monde, je reviens vers toi Tails afin de savoir si tu avais une date approximative de publication Merci
Salut assistech,
Saches que pour l'instant je suis en train de rédiger une première ébauche (donc à être vérifiée) du chapitre 7.
Comme il y a 11 chapitres agrémentés d'exercices, si je me débrouille bien, je peux espérer finir la rédaction d'ici deux semaines maximum, et la publication d'ici deux semaines et demi.
Enfin, j'espère.
Ok merci de ta reponse rapide. je pensais que tu allais d abord publier les premiers chapitre et ensuite les autres. bonne soiree. seb
Je pensais au départ, mais on m'a recommandé de faire tout directement : histoire d'être sur que le tout soit cohérent. Et finalement, je pense aussi que c'est mieux de procéder ainsi.
J'ai un probleme avec les tableaux
J'ai crée une boucle pour créer les boutons de la calculatrice et charger les controles dans le panneau. Pourtant j'ai une erreur d'execution (pas d'erreur de compilation). En plus je ne comprends pas :
bouton [i] = new JButton();
Je ne comprends pas comment le libéllé du bouton est passé?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 JButton[] boutons = new JButton[10]; int nombreDeBoutons = boutons.length; for(int i=0; i< nombreDeBoutons; i++) { boutons[i] = new JButton(); panneauChiffres.add(boutons[i]); }
Quelle est l'erreur de l'exécution et quand se produit-elle (au clic sur le bouton, au lancement, ...) ?
Eh bien dans ton cas, il ne l'est tout simplement pas. Il te faudrait faire quelque chose du genre plutôt :
Ou une variante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 JButton bouton = new JButton(); bouton.setLabel("toto");
Code : Sélectionner tout - Visualiser dans une fenêtre à part JButton bouton = new JButton("toto");
Merci Robin56, je vais revoir cette boucle. J'ai un autre probleme dans ce bloc :
Je ne comprends pas l'enchainement : La classe MoteurCalcul implante l'interface ActionListener. On utilise ensuite la méthode actionPerformed de cette classe avec la variable "événement" de type ActionEvent en argument?
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 public class MoteurCalcul implements ActionListener { public void actionPerformed(ActionEvent événement) { // Retrouve la source de l'action JButton boutonCliqué = (JButton) événement.getSource(); // Retrouve le libellé du bouton String libelléBoutonCliqué = boutonCliqué.getText(); // Concatène le libellé du bouton au texte // de la boîte de message JOptionPane.showConfirmDialog(null, "Tu as appuyé sur " + libelléBoutonCliqué, "Juste un test", JOptionPane.PLAIN_MESSAGE); } }
Pourtant la méthode est "void" donc ne retourne rien, est ce possible?
Ensuite la méthode getSource() appartient à la classe ActionEvent.
Ca voudrait dire qu'une méthode avec une variable de type objet( est ce le bon terme?) en argument permet d'appeller une méthode du type passé en argument?
Alors je vais tenter de comprendre ce que tu me dis point par point.
Oui c'est possible qu'une méthode ne retourne rien. La méthode actionPerformed() n'a pas besoin de renvoyer quoi que ce soit, elle doit simplement se charger d'effectuer une action. Que voudrais tu que cette méthode te retourne ? De plus elle nous donne en paramètre un objet de type ActionEvent qui contient toutes les infos nécessaire, le type d'action, le composant source, ...
En faisant l'exemple, ci-dessous, par exemple, on remarque son rôle (je n'ai pas testé ce morceau de code, il peut y avoir des petites "boulettes") :
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 // Gère les évènements des composants graphique public class Action implements ActionListener { public void actionPerformed(ActionEvent event) { JButton bouton = (JButton) event.getSource(); // On a cliqué sur le bouton First System.out.println("On a cliqué sur le bouton " + bouton.getText()); } } // Classe lanceur public class Lanceur { public static void main(String[] args) { ActionListener action = new Action(); JButton firstButton = new JButton("First"); firstButton.addActionListener(action); // Liaison du bouton et du listener d'action } }
Alors là j'ai un peu de mal à saisir ce que tu veux me faire comprendre. "une méthode avec une variable de type objet" ? Eh bien dans notre cas, actionPerformed() dispose d'une variable de type ActionEvent plutôt non ?Envoyé par loncle
Bonjour, j'ai un petit soucis sur l'exercice "VoitureJamesBond" du chapitre 2.
J'arrive bien à faire un override de la méthode public int rouler(int durée) mais j'arrive pas à retourner la valeur de durée sans ajouter un println à la méthode.
class VoitureJamesBond
class PropriétaireVoiture
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class VoitureJamesBond extends Voiture { public int rouler(int durée) { System.out.println("Bla bla bla, le conducteur roule depuis " + durée + " heures"); return distance = durée * 180 ; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class PropriétaireVoiture { public static void main(String[] args) { Voiture maVoiture = new Voiture(); VoitureJamesBond astonMartin = new VoitureJamesBond(); astonMartin.démarrer(); int distance = astonMartin.rouler(2); System.out.println("Bla bla bla, il a parcouru " + distance + " Kilomètres , bla bla bla); astonMartin.arrêter(); } }
Bonjour,
Déjà tu as oublié de refermer la chaine de caractères (par un copier/coller ?) dans ta classe PropriétaireVoiture.
Après, je dirais que l'erreur ne peut pas venir du fait que tu retires/remette la ligne avec System.out.println().
Ce n'est pas le cas non, regarde bien.
"action" est bien de type ActionListener et elle est passée à une fonction addActionListener qui prend un paramètre de type ActionListener.
Je n'appelle pas la méthode actionPerformed. A partir du moment où j'ai lié ma classe ActionListener à mon composant JButton, la méthode actionPerformed sera automatiquement appelée dès le clic sur le bouton. Comme tu le vois je ne gère donc pas son appel. C'est transparent pour moi.
Si si.
Effectivement, j'avais mal regardé. Il n'y a pas d'appel de la méthode actionPerformed.
Si j'ai bien compris la ligne : firstButton.addActionListener(action);
appelle la classe Action et sa méthode.
Si Action possédait 2 méthodes, les 2 méthodes seraient appelées systématiquement?
Ce n'est pas exactement ça. Il faut plutôt voir ça comme une liaison. En détaillant les interactions, on a donc :
1. Le JButton qui est le composant graphique.
2. ActionListener qui est l'écouteur d'évènement.
3. addActionListener() qui permet de créer la liaison entre le composant graphique et l'écouteur d'évènement. Grâce à cette méthode, c'est comme si l'on disait : "Cette classe ActionListener va écouter les évènements du composant JButton".
4. Et il est décris dans la spécification de Java que lorsque je vais cliquer sur le JButton, ceci va appeler la méthode "actionPerformed()" de l'écouteur d'évènement lié avec. Il n'est donc absolument pas mentionné que n'importe quelle méthode de la classe ActionListener va être appelée à ce moment là.
Ah oui, merci, c'est suite au copier/coller
Bon j'ai rectifié mon code, je pense avoir corrigé des erreurs, le résultat s'affiche bien tout du moins.
Class VoitureJamesBond
Class JamesBond
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class VoitureJamesBond extends Voiture { public int rouler(int duree) { return duree * 180; } }
Si, je pouvai avoir confirmation qu'il n'y a pas d'erreurs. Merci
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 public class JamesBond { public static void main(String[] args) { VoitureJamesBond astonMartin = new VoitureJamesBond(); astonMartin.démarrer(); int distance; int duree; distance = astonMartin.rouler(6); duree = distance / 180; System.out.println("Déboulant comme une flêche dans un nuage de fumée blanche, James vient de conduire pendant " + duree + " heures et à une allure vertigineuse puisqu'il a parcouru un total de " + distance + " kilomètres"); astonMartin.arrêter(); } }
Toujours dans le meme chapitre, je ne comprends pas précisement la notion de référence.
Le constructeur MoteurCalcul appelle: une reference à l'instance de l'objet calculatrice (page97).
Je croyais qu'un objet était une instance d'une classe.
Mais l'instance d'un objet c'est une référence? Au final c'est quoi une référence?Un objet?
Le but de la référence est de "récupérer" les variables de la classe Calculatrice, dans la Classe MoteurCalcul.
Donc on peut récupérer toutes les variables d'un seul coup?
Dans le classe Calculatrice:
le "this" represente quoi? une Classe?Un objet (de classe Calculatrice)?
Code : Sélectionner tout - Visualiser dans une fenêtre à part MoteurCalcul moteurCalcul = new MoteurCalcul(this);
Autre point:
Quel est la différence entre:
Et
Code : Sélectionner tout - Visualiser dans une fenêtre à part NumberFormat formatNombres = NumberFormat.getInstance();
formatNombres est un objet et il n'a pas besoin d'etre instancié (par "new") parce que getInstance() est une méthode static?
Code : Sélectionner tout - Visualiser dans une fenêtre à part NumberFormat formatNombres = new NumberFormat();
Encore un autre point :
Quel est la différence entre :
Et
Code : Sélectionner tout - Visualiser dans une fenêtre à part double monNombre = (Double)nombre.parse(maChaine, new ParsePosition(0));
Code : Sélectionner tout - Visualiser dans une fenêtre à part double monNombre = nombre.parse(maChaine, new ParsePosition(0)).doubleValue();
EDIT: ajout question sur la classe NumberFormat.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager