Faire correspondre une variable d'une méthode à l'autre ?
Résolu/Fermé
gamarts99
Messages postés
3
Date d'inscription
mercredi 23 mars 2016
Statut
Membre
Dernière intervention
23 mars 2016
-
23 mars 2016 à 11:22
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 24 mars 2016 à 13:31
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 24 mars 2016 à 13:31
A voir également:
- Faire correspondre une variable d'une méthode à l'autre ?
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- La méthode range de l'objet worksheet a échoué ✓ - Forum VB / VBA
- Dans le document à télécharger, léa a utilisé 2 méthodes différentes pour centrer le nom des continents. lesquels sont centrés correctement ? ✓ - Forum Javascript
- Dans la présentation à télécharger, déplacez l'image dans le cadre sans en modifier la taille. redressez l'image pour que le niveau de la mer soit à l'horizontale. faites correspondre : la ligne avec le niveau de la mer ; le point avec le sommet de la grande voile. combien d'oiseaux sont dans le cadre ? - Forum Word
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
2 réponses
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
107
Modifié par greg6614 le 23/03/2016 à 16:03
Modifié par greg6614 le 23/03/2016 à 16:03
Salut, deux solutions :
Premièrement en reprenant ton exemple :
On rajoute la variable dans l'entête de la méthode pour la passer en paramètre.
Ou bien second choix :
Ici x sera visible dans toute ta classe mais uniquement dans cette classe. C'est l'encapsulation. Je rappel quand même que dans une methode
Exemple :
Tu as différents mots-clés pour la visibilité des tes attributs au seins d'une classe :
Un exmple qui devrait t'aider :
Enfin si tu ne précise pas de visibilité, ton attribut est "package friendly" c'est à dire qu'il sera visible dans toutes les classes de ton package.
Un attribut static ne nécessité pas l''instanciation de sa classe pour être visible et est défini dans un contexte statique et non objet, c'est à dire que cette variable n'existe qu'en un seul exemplaire.
Rq : La visibilité s'applique aussi au méthodes.
En espérant t'avoir aider
Greg
Premièrement en reprenant ton exemple :
public static void main(String[] args) throws IOException { int x = 45; testx(args, x); } static void testx(String[] args, int x){ System.out.println(x); }
On rajoute la variable dans l'entête de la méthode pour la passer en paramètre.
Ou bien second choix :
private int x; public static void main(String[] args) throws IOException { x = 45; testx(args, x); } static void testx(String[] args){ System.out.println(x); }
Ici x sera visible dans toute ta classe mais uniquement dans cette classe. C'est l'encapsulation. Je rappel quand même que dans une methode
statictu ne peux pas utiliser le mot clés
this. Par contre si ta méthode n'est pas
staticpar convention l'appel aux attributs se font précédés par
this.
Exemple :
public class Animal{ private int pattes; public Animal(int nbrPattes){ this.pattes = nbrPattes; } public int getNbrPattes(){ return this.pattes; } }
Tu as différents mots-clés pour la visibilité des tes attributs au seins d'une classe :
private
public
static
protected
Un exmple qui devrait t'aider :
public class Mere { private int a; protected int b; public int c; static int d; } public class Fille extends Mere { public void afficher() { System.out.println(a); /*ne marche pas car une variable private n'est pas visible depuis une classe fille*/ System.out.println(b); /*marche car une variable protected est visible depuis une classe fille*/ System.out.println(c): /*fonctionne tout le temps car c est public*/ System.out.println(Mere.d): /*fonctionne tout le temps car d est static, cependant il faut l'appeler via la classe*/ } } public class Externe { //On suppose que la classe Externe est dans un autre package que Mere et Fille public void afficher() { Mere m = new Mere(); System.out.println(m.a); // ne marche pas System.out.println(m.b); // ne marche pas System.out.println(m.c): //fonctionne tout le temps car c est public System.out.println(Mere.d): /*fonctionne tout le temps car d est static, cependant il faut l'appeler via la classe*/ } }
Enfin si tu ne précise pas de visibilité, ton attribut est "package friendly" c'est à dire qu'il sera visible dans toutes les classes de ton package.
Un attribut static ne nécessité pas l''instanciation de sa classe pour être visible et est défini dans un contexte statique et non objet, c'est à dire que cette variable n'existe qu'en un seul exemplaire.
Rq : La visibilité s'applique aussi au méthodes.
En espérant t'avoir aider
Greg
gamarts99
Messages postés
3
Date d'inscription
mercredi 23 mars 2016
Statut
Membre
Dernière intervention
23 mars 2016
23 mars 2016 à 16:35
23 mars 2016 à 16:35
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
107
Modifié par greg6614 le 23/03/2016 à 16:43
Modifié par greg6614 le 23/03/2016 à 16:43
Autant pour moi je suis allé trop vite. Dans une méthode
Donc ici si tu met x en
Surtout qu'il ne faut généralement jamais écrire trop de code dans un main car JAVA t'exécute ta méthode main comme point d'entré dans ton programmes puis "jette" le main et ne s'en sert plus jusqu’à la fin de l'exécution.
statictu ne peux manipuler que des variables
staticou local (donc déclarées dans ta méthode). Le soucis avec ces variables c'est qu'elles n'existent qu'une seul fois pour ta classe et non une fois par objet.
Donc ici si tu met x en
staticsa valeur sera unique et donc chaque modification de celle-ci sera valable pour toutes tes autres instances. D'où l’intérêt de créer des classes annexes.
Surtout qu'il ne faut généralement jamais écrire trop de code dans un main car JAVA t'exécute ta méthode main comme point d'entré dans ton programmes puis "jette" le main et ne s'en sert plus jusqu’à la fin de l'exécution.
gamarts99
Messages postés
3
Date d'inscription
mercredi 23 mars 2016
Statut
Membre
Dernière intervention
23 mars 2016
>
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
23 mars 2016 à 16:50
23 mars 2016 à 16:50
merci infiniment pour ton aide, je pourrais enfin finir mon projet ;-) !
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
107
23 mars 2016 à 17:48
23 mars 2016 à 17:48
Avec plaisir, n'oublie pas de mettre ton sujet en résolu :)
poisson86
Messages postés
123
Date d'inscription
vendredi 9 décembre 2011
Statut
Membre
Dernière intervention
18 janvier 2023
2
24 mars 2016 à 13:06
24 mars 2016 à 13:06
Rebonjour je voulais savoir ce que vous pensiez de ce code qui correspond au menu de mon jeu, et mon problème avec le code que je vous ai déjà donner c'était de faire un sous menu et donc de replacer mon panneau, j'ai compris grâce à votre exemple sauf que lorsque que j'essaye de faire cela avec du graphisme tout ne marche pas et je tourne en rond :/
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
Fenetre Fen = new Fenetre();
}
}
public class Fenetre extends JFrame implements ActionListener{
JButton b_jouer = new JButton("Jouer");
JButton b_options = new JButton("Options");
JButton b_boutique = new JButton("Boutique");
JButton b_succes = new JButton("Succès");
Pan_Menu pan_menu = new Pan_Menu();
public Fenetre(){
/////super("Kash: CW"); ->>>> je ne comprends pas à quoi sert Super() ici ça nomme la fenetre
this.setSize(1000, 600);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setContentPane(pan_menu);
pan_menu.setLayout(null);
//Bouton Jouer
b_jouer.addActionListener(new Fen_Jouer());
pan_menu.add(b_jouer);
b_jouer.setBounds(350, 250, 300, 100);
//Bouton Options
b_options.addActionListener(new Options());
pan_menu.add(b_options);
b_options.setBounds(850, 430, 100, 100);
//Bouton Boutique
b_boutique.addActionListener(new Fen_Boutique());
pan_menu.add(b_boutique);
b_boutique.setBounds(400, 430, 200, 100);
//Bouton Succès
b_succes.addActionListener(new Fen_Succes());
pan_menu.add(b_succes);
b_succes.setBounds(50, 430, 100, 100);
this.setVisible(true);
}
public class Pan_Menu extends JPanel {
JButton bouton = new JButton("Mon bouton");
public void paintComponent(Graphics g){
Font font = new Font("Courier", Font.BOLD, 40);
g.setFont(font);
g.setColor(Color.RED);
g.drawString("Kash : Celestial Wonder", 225,130);
/* try { Image img = ImageIO.read(new File("menu.png"));
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
//Pour une image de fond
//g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
} catch (IOException e) {
e.printStackTrace();
} */
}
}
}
}
poisson86
Messages postés
123
Date d'inscription
vendredi 9 décembre 2011
Statut
Membre
Dernière intervention
18 janvier 2023
2
24 mars 2016 à 13:08
24 mars 2016 à 13:08
Voici le code qui essaie de faire ce sous menu ^^
import java.awt.event.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
public class Options implements ActionListener {
Pan_Options pan_menu = new Pan_Options();
public void actionPerformed(ActionEvent e){
JPanel pan_options = new JPanel();
pan_options.setContentPane(pan_options);
}
public class Pan_Options extends JPanel {
JButton bouton = new JButton("Mon bouton");
public void paintComponent(Graphics g){
Font font = new Font("Courier", Font.BOLD, 40);
g.setFont(font);
g.setColor(Color.BLUE);
g.drawString("test fenetre option", 225,130);
}
}
}