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 :

paintComponent ne se lance pas sur une fenêtre JFrame transférée (javax.swing)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut paintComponent ne se lance pas sur une fenêtre JFrame transférée (javax.swing)
    Bonsoir,

    Tout d'abord, désolé pour le titre qui peut faire peur, mais vous allez voir que mon problème est tout bête à comprendre.

    En effet, pour alléger mon code et le séparer, j'ai procédé comme ceci :
    - Une fenêtre jeu qui contient les bases d'une fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class FenetreJeu extends JFrame
    {
    	public FenetreJeu(String titre)
    	{
    		super(titre);
    		[...]
    		FenetreMenu menu = new FenetreMenu(this);
    	}
    }
    - Une fenêtre menu qui contient toutes les informations d'une fenêtre :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public class FenetreMenu extends JFrame
    {	
    	private JButton nouvellePartie;
    	private JButton chargerPartie;
    	private JButton options;
    	private JButton quitter;
     
    	private FenetreJeu fen;
     
    	public FenetreMenu(FenetreJeu fen)
    	{
    		System.out.println("Test");
    		this.fen = fen;
    		Container c = fen.getContentPane();
    		c.removeAll();
    		c.add(new FondEcran("name.jpg"));
    		c.add(getPanelCentre(),BorderLayout.CENTER);
    		c.add(getPanelSud(),BorderLayout.SOUTH);
    		c.revalidate();
    	}
     
    [...]
     
    	public class FondEcran extends JPanel
    	{
    		private Image fond_ecran;
     
    		public FondEcran(String nom)
    		{
    	        fond_ecran = new ImageIcon("name.jpg").getImage();
    		}
     
    		public void paintComponent(Graphics g)
    		{
    			super.paintComponent(g);
    			System.out.println("Test");
    			int larg = fen.getWidth();
    			int haut = fen.getHeight();
    			g.drawImage(fond_ecran, 0, 0, larg,haut, fen);
    		}
    	}
    }
    Et le soucis est que le paintComponent n'est pas appelé implicitement comme il devrait l'être. La console n'affiche pas le "test" demandé.

    Voici ce que j'ai essayé :

    - fen.setContentPane(new FondEcran("name.jpg")); : L'image s'affiche mais pas les Panel, cela freeze mon constructeur.
    - Appeler le paintComponent dans le constructeur de FondEcran en transférant les Graphics du container (c.getGraphics() : Le "test" s'affiche mais pas l'image.

    Voilà, je ne sais pas quoi faire d'autre, si vous avez une solution ou un autre moyen de séparer le code, je vous en serai très reconnaissant

    Cordialement,

    Un étudiant en panique

    EDIT : Le chemin de l'image est bon, si je fais ma inner-class FondEcran dans FenetreJeu, l'image s'affiche puis laisse place à FenetreMenu (logique, puisque je fais un removeAll()). Je ne peux pas me passer de removeAll() puisque je dois faire plusieurs fenêtres.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ton panel FondEcran ne contenant rien et de surcroit étant ajouté au conteneur sans information de position (nord/sud/est/ouest/centre), il a probablement une taille de 0x0, ce qui fait que sont conteneur estime qu'il n'y a aucune raison d'appeler paint dessus, puisque rien à dessiner.


    Vu ce que tu à l'air de vouloir faire dessus, je pense que ton code devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public FenetreMenu(FenetreJeu fen)
    	{
    		System.out.println("Test");
    		this.fen = fen;
                    JPanel c = new FondEcran("name.jpg");
    		fen.setContentPane(c);
    		c.removeAll();
                    c.setLayout(new BorderLayout());
    		c.add(getPanelCentre(),BorderLayout.CENTER);
    		c.add(getPanelSud(),BorderLayout.SOUTH);
    		c.revalidate();
    	}

  3. #3
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonsoir tchize_ et merci de ta réponse.

    J'ai essayé ton code, le programme tourne, les panels s'affichent, le "test" apparaît bien mais je n'ai toujours pas d'image.

    Si t'as d'autres suggestions, je suis preneur

    Cordialement,

    WiMiOP

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    les panels qui sont à l'avant, met leur propriété opaque à false, sinon ils cachent l'arrière plan.

  5. #5
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci infiniment tchize_ ! Ça marche, merci beaucoup !

    Désolé pour mon incompétence, je suis en première année de DUT et tout ce que tu m'as conseillé, je ne l'ai pas vu en cours et swing est tellement vaste ... ^^"

    Encore merci ! Cela fait des jours que je cherchais une solution et même mon prof ne savait pas quoi faire ^^"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerBuilder] Récupérer la main sur une fenêtre modale
    Par jpdar dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 14h21
  2. Réponses: 4
    Dernier message: 25/07/2005, 14h24
  3. Faire défiler un texte sur une fenêtre
    Par Crisanar dans le forum Windows
    Réponses: 15
    Dernier message: 24/11/2004, 23h05
  4. Je n'arrive pas à détruire une fenêtre
    Par CORREGE Frédéric dans le forum MFC
    Réponses: 6
    Dernier message: 22/02/2004, 20h28
  5. Rendre le curseur invisible sur une fenêtre donnée
    Par Meuhmeuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/11/2002, 12h25

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