IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

JPanel qui ne se repaint() pas


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Etudiant en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut JPanel qui ne se repaint() pas
    Bonsoir à tous. Je suis dans une sacré incompréhension, je vous l'avoue.

    Déjà, ça fait 2 jours que je fais des recherches en tous genres. Et aucune n'a été concluante. Donc je me tourne vers vous.

    Voyez-vous, j'ai une fenêtre très jolie comme celle ci :


    Quand on clique sur Fichier, voici ce qu'il s'affiche :


    Et normalement, quand on clique sur Nouveau, on appelle une méthode censée instancier une variable. Voici comment fonctionne le PanelAccueil.java : Si la variable n'est pas instanciée, on affiche le message de bienvenue. Si la variable est instanciée, on affiche "Y'a un projet en cours" à la place. Cependant, le JPanel ne semble jamais vouloir se repaint(), s'updateUI()... J'ai tout essayé de ce côté là. Je vous file le source nécéssaire au diagnostic :

    Code EditeurDestinies.java : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package editeurvn;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    import jeu.*;
     
    public class EditeurDestinies extends JFrame {
     
        public static VN jeu;
        private PanelAccueil pA;
     
        public EditeurDestinies() {
    		setTitle("Editeur Destinies");
    		setLocation(50, 50); 
    		setSize(700, 500);
     
    		setJMenuBar(new BarreMenu(this));
     
    		this.pA = new PanelAccueil();
    		add(this.pA);
    		pack();
     
    		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    		setVisible(true);
        }
     
        public void newProject() {
    		EditeurDestinies.jeu = new VN();
    		this.pA.repaint();
    		pack();
        }
     
        public static void main(String[] args) {   
    		EditeurDestinies ed = new EditeurDestinies();
     
        }
     
    }

    Code BarreMenu.java : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    package editeurvn;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class BarreMenu extends JMenuBar implements ActionListener {
        private JMenuItem nouveau;
        private JMenuItem charger;
        private JMenuItem quitter;
     
        private JMenuItem edEvenements;
        private JMenuItem edMonstres;
        private JMenuItem edObjets;
     
        private EditeurDestinies edD;
     
        public BarreMenu(EditeurDestinies edD) {
    		this.edD = edD;
     
    		JMenu menuFichier = new JMenu("Fichier");
    		JMenu menuEditeurs = new JMenu("Editeurs");
     
    		this.nouveau = new JMenuItem("Nouveau");
    		this.charger = new JMenuItem("Charger");
    		this.quitter = new JMenuItem("Quitter");
     
    		this.edEvenements = new JMenuItem("Editeur Evenements");
    		this.edMonstres = new JMenuItem("Editeur Monstres");
    		this.edObjets = new JMenuItem("Editeur Objets");
     
    		menuFichier.add(this.nouveau);
    		menuFichier.add(this.charger);
    		menuFichier.addSeparator();
    		menuFichier.add(this.quitter);
     
    		menuEditeurs.add(this.edEvenements);
    		menuEditeurs.add(this.edMonstres);
    		menuEditeurs.add(this.edObjets); 
     
    		this.nouveau.addActionListener(this);
    		this.charger.addActionListener(this);
    		this.quitter.addActionListener(this);
     
    		this.edEvenements.addActionListener(this);
    		this.edMonstres.addActionListener(this);
    		this.edObjets.addActionListener(this);
     
     
    		this.add(menuFichier);
    		this.add(menuEditeurs);
     
        }
     
        public void actionPerformed(ActionEvent e) {
    		System.out.println(((JMenuItem)e.getSource()).getText());
    		if(e.getSource() == this.quitter)
    			System.exit(0);
    		if(e.getSource() == this.nouveau)
    			this.edD.newProject();
        }
    }
    Code PanelAccueil.java : 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
    21
    22
    package editeurvn;
     
    import java.awt.event.*;
    import javax.swing.*;
     
    import jeu.*;
     
    public class PanelAccueil extends JPanel {
        private JLabel affichage;
     
        public PanelAccueil() {
    		if(EditeurDestinies.jeu == null)
    			this.affichage = new JLabel("<html><center><font size=6 color=\"red\" >Bienvenue dans l'éditeur de Visual Novels !</font><br /><br />"
    				+ "Pour accéder aux contenus de ce logiciel, utilisez le menu du haut.<br/></center></html>");
    		else
    			this.affichage = new JLabel("Y'a un projet de créé");
     
    		add(this.affichage);
     
        }
     
    }

    Bien sûr, le tout se compile parfaitement, et aucune erreur n'apparaît. Je sèche vraiment, et je cherche vraiment à connaître la cause de cette erreur qui m'est déjà arrivée dans le passé.

    Merci beaucoup d'avance, je m'en remets à vous.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est un peu normal : la sélection du message en fonction de la variable jeu se fait dans le constructeur de PanelAccueil. Après sa construction, tu peux toujours changer changer la variable jeu, faire des repaint() ou ce que tu veux, le constructeur ne sera pas rexécuté !

    Pour ne pas simplement ajouter une méthode updateText() qui fait un setText() sur le JLabel :

    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
    21
    22
    23
    public class PanelAccueil extends JPanel {
        private JLabel affichage;
     
        public PanelAccueil() {
        	this.affichage=new JLabel(evalText());
     
    		add(this.affichage);
     
        }
     
        private String evalText() {
    		if(EditeurDestinies.jeu == null)
    			return "<html><center><font size=6 color=\"red\" >Bienvenue dans l'éditeur de Visual Novels !</font><br /><br />"
    				+ "Pour accéder aux contenus de ce logiciel, utilisez le menu du haut.<br/></center></html>";
    		else
    			return "Y'a un projet de créé";
        }
     
        public void updateText() {
    		this.affichage.setText(evalText());	
        }
     
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    public void newProject() {
    		EditeurDestinies.jeu = new VN();
    		//this.pA.repaint();
    		this.pA.updateText();
    		// ça il faut éviter, ou alors prévoir un layout qui évite un changement de taille pack();
    }
    ...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Etudiant en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut
    ... Je comprends. Je pensais que repaint() ou updateUI() reprenaient le constructeur !

    Mais si jamais c'est plus qu'un JLabel à modifier, on fait this.removeAll() et le panel sera vierge ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par TotorolePacha Voir le message
    ... Je comprends. Je pensais que repaint() ou updateUI() reprenaient le constructeur !
    Le constructeur n'est exécuté que quand on fait un new... Il n'y a pas de comportement spécial pour une instance de classe de AWT ou de SWING.

    Citation Envoyé par TotorolePacha Voir le message
    Mais si jamais c'est plus qu'un JLabel à modifier, on fait this.removeAll() et le panel sera vierge ?
    Oui.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. jpanel qui s'affiche pas
    Par robert_trudel dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 25/03/2009, 08h14
  2. Un objet JPanel qui ne s'affiche pas.
    Par poppels dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 09/03/2009, 09h54
  3. un objet JPanel qui ne s'affiche pas
    Par dark_geek dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 05/03/2009, 21h41
  4. Réponses: 4
    Dernier message: 21/07/2008, 22h32
  5. JPanel qui ne montre pas ses onglets
    Par comme de bien entendu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/03/2006, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo