Recréer un Jpanel

Résolu/Fermé
Poisson86 - 22 mars 2016 à 14:52
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 24 mars 2016 à 21:34
Bonjour je suis actuellement entrain de coder un jeu, je commence plutôt, et je cherche à faire un menu avec des sous-menus.

J'ai donc mon menu avec mes différents boutons et je souhaite lorsque que je clique par exemple sur option, rentrer dans le sous menu option.

On m'a conseiller de faire un nouveau panneau, donc j'ai chercher à supprimer mon panneau et d'en faire un nouveau mais sans succès, voici ce que j'essaie de faire et je ne comprends où sont exactement les problèmes ^^ :
 import java.awt.event.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
 
 
public class Fen_Options implements ActionListener {
     
    JPanel pan_options = new JPanel();
    //Panneau pan_options = new paintComponent1();
     
    public void actionPerformed(ActionEvent e){
         
         
        public void paintComponent(Graphics g){
             
         
        Font font = new Font("Courier", Font.BOLD, 40);
        g.setFont(font);
        g.setColor(Color.RED);         
        g.drawString("Options", 225,130);
        }
    }
 
         
}  

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:53
Hello,

en effet tu dois avoir un nouveau JPanel pour ton sous-menu. Ensuite pour ce qui est du passage de l'un à l'autre, regarde du côté du layout CardLayout. Avec un exemple ICI

En espérant t'avoir aider 
Greg
0
poisson86 Messages postés 123 Date d'inscription vendredi 9 décembre 2011 Statut Membre Dernière intervention 18 janvier 2023 2
23 mars 2016 à 17:25
Daccord merci de ta réponse :), cependant j'ai un gros problème (qui est mon plus gros d'ailleurs) c'est que lorsque je fais une nouvelle classe et que je veux appeler mon objet panneau et bien celui ci ne veut pas comme si il n’existait pas alors que ma classe principale est bien en public, etc
J'ai vraiment du mal avec les this. ou les objet. lorsque je fais un new class ^^
0
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 à 18:15
Voilà un exemple de classe définissant un constructeur et un exemple de son instanciation :

public class Couleur {
 //Ici j'ai mes attributs qui vont avoir pour but de sauvegarder les valeurs des paramétres du constructeurs dans des variables encapsulées dans la classe
 //Le mot clés private signifie que ces variables ne sont visibles que dans ma classe
 private int rouge;
 private int vert;
 private int bleu;

 //Ici j'ai mon constructeur
 public Couleur(int rouge, int vert, int bleu) { //Rouge, Vert et Bleu sont des paramétres à passer lors de l'appel au constructeur
  //On affecte les valeurs des paramétres au variables encapsulées
  //Le mot clés this signifie l'instance en cour
  this.rouge = rouge;
  this.vert = vert;
  this.bleu = bleu;
 }
 
 //Retourne la valeur de la variable Rouge de l'objet courant
 public int getRouge(){
  return this.rouge;
 }
 
 //Retourne la valeur de la variable Vert de l'objet courant
 public int getVert(){
  return this.vert;
 }
 
 //Retourne la valeur de la variable Bleu de l'objet courant
 public int getBleu(){
  return this.bleu;
 }
 
 //Ici la méthode prend un objet Couleur en paramétre qui sera donc à spécifier lors de l'appel de cette méthode
 public void melangerCouleurs(Couleur c){
  //On affecte une nouvelle valeur à la variable Rouge de l'objet COURANT
  //En ajoutant la valeur de l'objet courant et la valeur de l'objet en paramétre
  this.rouge = this.getRouge() + c.getRouge();
  this.vert = this.getVert() + c.getVert();
  this.bleu = this.getBleu() + c.getBleu();
 }

}


public class Main {

 public static void main(String[] args) {
  //On crée deux objets de Type couleur avec le mot clés new
  Couleur c1 = new Couleur(128,168,200);
  Couleur c2 = new Couleur(154,255,11);
  //Affiche la valeur rouge de c1 soit 128
  System.out.println(c1.getRouge());
  //Affiche la valeur rouge de c2 soit 154
  System.out.println(c2.getRouge());
  //Les deux valeurs sont différentes car les variables de la classes sont recréée à chaque création d'un nouvel objet et sont donc indépendantes
 
  //Tu peux appeler des opérations sur un objet
  //Ici le mot clés this dans ta classe correspond à c1
  c1.melangerCouleurs(c2);
  //Si tu affiches à nouveau la valeur de rouge des deux couleurs tu peux voir que celle de c2 n'a pas bougé car la modification à eu lieu sur l'objet courant soit c1 (celui sur lequel tu fais l'appel de méthode)
  //Retourn 128 + 154 soit 282
  System.out.println(c1.getRouge());
  //Affiche la valeur rouge de c2 soit 154 qui n'est pas modifiée
  System.out.println(c2.getRouge());
 }

}


Retour d’exécution en image du main ci dessus :



Pour mieux comprendre les mots clés
private

public

protected

static

Je t'invite à jeter un oeil sur mon post ICI
En espérant t'avoir aider 
Greg
0
poisson86 Messages postés 123 Date d'inscription vendredi 9 décembre 2011 Statut Membre Dernière intervention 18 janvier 2023 2
23 mars 2016 à 18:30
Si je ne veux utiliser que du public qu'est ce que cela change ?
0
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 à 19:21
public
permet de rendre accessible partout quelque soit la classe ton attribut ou ta méthode mais uniquement via une instance de ta classe.

Si je reprend l'exemple précédent en ajoutant un attribut
public
:

public class Couleur {
 //Ici j'ai mes attributs qui vont avoir pour but de sauvegarder les valeurs des paramétres du constructeurs dans des variables encapsulées dans la classe
 //Le mot clés private signifie que ces variables ne sont visibles que dans ma classe
 private int rouge;
 private int vert;
 private int bleu;
 public String rvb;

 //Ici j'ai mon constructeur
 public Couleur(int rouge, int vert, int bleu) { //Rouge, Vert et Bleu sont des paramétres à passer lors de l'appel au constructeur
  //On affecte les valeurs des paramétres au variables encapsulées
  //Le mot clés this signifie l'instance en cour
  this.rouge = rouge;
  this.vert = vert;
  this.bleu = bleu;
  this.rvb = "["+this.getRouge()+","+this.getVert()+","+this.getBleu()+"]";
 }
 
 //Retourne la valeur de la variable Rouge de l'objet courant
 public int getRouge(){
  return this.rouge;
 }
 
 //Retourne la valeur de la variable Vert de l'objet courant
 public int getVert(){
  return this.vert;
 }
 
 //Retourne la valeur de la variable Bleu de l'objet courant
 public int getBleu(){
  return this.bleu;
 }
 
 //Ici la méthode prend un objet Couleur en paramétre qui sera donc à spécifier lors de l'appel de cette méthode
 public void melangerCouleurs(Couleur c){
  //On affecte une nouvelle valeur à la variable Rouge de l'objet COURANT
  //En ajoutant la valeur de l'objet courant et la valeur de l'objet en paramétre
  this.rouge = this.getRouge() + c.getRouge();
  this.vert = this.getVert() + c.getVert();
  this.bleu = this.getBleu() + c.getBleu();
 }

}


public class Main {

 public static void main(String[] args) {
  //On crée deux objets de Type couleur avec le mot clés new
  Couleur c1 = new Couleur(128,168,200);
  Couleur c2 = new Couleur(154,255,11);
  //Affiche la valeur rouge de c1 soit 128
  System.out.println(c1.getRouge());
  //Affiche la valeur rouge de c2 soit 154
  System.out.println(c2.getRouge());
  //Les deux valeurs sont différentes car les variables de la classes sont recréée à chaque création d'un nouvel objet et sont donc indépendantes
 
  //Tu peux appeler des opérations sur un objet
  //Ici le mot clés this dans ta classe correspond à c1
  c1.melangerCouleurs(c2);
  //Si tu affiches à nouveau la valeur de rouge des deux couleurs tu peux voir que celle de c2 n'a pas bougé car la modification à eu lieu sur l'objet courant soit c1 (celui sur lequel tu fais l'appel de méthode)
  //Retourn 128 + 154 soit 282
  System.out.println(c1.getRouge());
  //Affiche la valeur rouge de c2 soit 154 qui n'est pas modifiée
  System.out.println(c2.getRouge());
  //Tu peux accéder à la variable public rvb via l'objet
  System.out.println(c1.rvb);
 }

}


Pense à regarder le lien que je t'ai donné en fin du post précédent.
0
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 à 00:54
Merci bien je regarde tout demain :)
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
24 mars 2016 à 11:53
Avec plaisir :)
0
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:31
Bon j'ai compris ton exemple mais je n'arrive pas à le transcrire dans mon programme en graphique voici le code de mon menu et ma question pour faire un sous menu, c'est de refaire un JPanel ou de faire autre chose parce que là je tourne en rond

	
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");
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);


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();
} */
}
}

0