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

Graphisme Java Discussion :

bufferredImage et Composants dans JWindow


Sujet :

Graphisme Java

  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut bufferredImage et Composants dans JWindow
    Bonjour,

    je réalise une boite de dialogue personnalisée, basée sur une JWindow.
    En m'appuyant sur les différent tutoriels du site, j'ai réussi à mettre une BufferedImage en fond de fenêtre (imageTravail).

    Par contre, je n'arrive pas à faire cotoyer ce fond d'écran, et les composants JButton et autres...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void paint ( Graphics G )
    {
      // TODO: résoudre le problème d'affichage:
     
      if ( imageTravail != null )
        G.drawImage( imageTravail, 0, 0, null );
     
      paintComponents( G );
    }
    Dans le cas de figure ci-dessus, lorsque JAVA dessine les boutons, il me remplit le fond de fenêtre et me sabote ma belle présentation

    Lorsque je mets paintComponents( G ); avant le dessin de bufferredImage, ce sont les boutons qui n'apparaissent pas...sauf si je passe au-dessus d'eux avec la souris.

    Quel est le mécanisme à employer pour que tout cela fonctionne ?

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il faut utiliser "setOpaque( false )" sur chaque JPanel et "setContentAreaFilled( false )" sur les JButton.
    Dans "paintComponent", tu te contentes d'appeler la méthode parent surchargée puis d'afficher le BufferedImage.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    la méthode à redéfinir n'est ni paint ni paintComponents.
    En effet la méthode paint s'occupe de lancer les méthodes paintComponent, paintBorder et paintChildren. De fait ta façon de la redéfinir a supprimé l'appel à paintChildren, donc il est normal qu'aucun composant ajouté à ton JPanel ne s'affiche.
    paintComponents quant à elle est juste un héritage d'AWT qui ne sert à rien à part foutre le bordel chez les gens qui ne font pas attention ou ne connaissent pas l'API.

    La bonne méthode à redéfinit pour customiser l'aspect d'un JComponent est la méthode paintComponent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @override
    protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       g.drawImage(img,0,0,null);
    }
    Voilà c'est tout

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Merci pour vos réponses, cependant j'ai un souci car ma classe étend JWindow. Et je n'ai pas de méthode paintComponent; je n'ai accès qu'à this.paintComponents.

    Là je tourne en rond

    De plus, les JButton ont bien leur propriétés setOpaque ainsi que setContentAreaFilled, toutes 2 mises à false

    Le problème reste entier...

    Je me demande si le placement de l'image dans un composant qui occuperait toute la surface de la JWindow ne serait pas une solution. Mais il faudrait que je place par dessus ce composant, les jButton. Je ne vois pas comment développer ce mécanisme.

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Mais non, tu dois étendre JPanel et surcharger paintComponent. Ensuite tu places ton JPanel dans un JWindow.
    Ensuite c'est dans ce JPanel que tu vas placer tes boutons.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    J'ai compris !!!!!!!!

    Je vous remercie beaucoup.
    La solution est finalement très simple... mais pas facile à trouver lorsqu'on ne comprends pas le mécanisme d'affichage JAVA.

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

Discussions similaires

  1. Disposition de composants dans une JFrame
    Par Regis.C dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 21/03/2005, 17h38
  2. [VS.NET] [C#] Icone des composants dans l'IDE VS 2003
    Par Ingham dans le forum Windows Forms
    Réponses: 7
    Dernier message: 11/01/2005, 23h50
  3. [C#] Ajouter son propre composant dans Design de VS.Net
    Par yannick_sch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/08/2004, 11h14
  4. [Delphi] Icone des composants dans la palette
    Par jacquesberger dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/04/2004, 15h42
  5. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44

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