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

AWT/Swing Java Discussion :

Superposition de plusieurs Container


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut Superposition de plusieurs Container
    Bonjour,

    Ma question est la suivante, est-ce que les containers gèrent eux mêmes leur superposition où faut-il le faire à la main et si oui faut-il le leur demander et comment ?

    Mon problème est que j'appelle un nombre indéterminé de fois et à n'importe quelle position la fonction clearRect() dans un Container et que je ne veux pas que cet appel efface ce qui est affiché sur un ou plusieurs autres Container(s) qui peuvent être situés derrière.

    Je dois utiliser les classes les plus hautes dans la hiérarchie des classes, je dois tout faire pour ne pas utiliser de composants tout fait.

    Je sèche complètement, ca fait plusieurs heures que j'essaie de trouver une solution mais impossible alors si quelqu'un en a une, n'hésitez pas !

    Autre contrainte, je n'ai pas accès au classes de java.swing et je n'ai que celles ci de java.awt :

    java.awt
    java.awt.color
    java.awt.event
    java.awt.image

    Merci d'avance de votre aide.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Quel est ton but en fait?

    Le clearRect ne nettoie normalement que ce qui est contenu dans le contexte graphique du conteneur sur lequel il est appelé.

    La question étant, où fais tu ton clearRect, d'où proviennent les graphics sur lesquels tu le fais.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Mon but est de réaliser des animations.

    Mes appels à clearRect sur des dessins se font dans le même Container où sont situés ces dessins que je veux effacer et le problème et que ces appels effacent aussi les autres dessins dans les autres Container.

    Si je comprends bien ce que tu dis, les Containers sont normalement censé gérer eux-mêmes leur contexte graphique et ne modifient pas celui des autres. Dans ce cas le problème vient peut-être du fait que j'utilise monContainer.drawImage et que donc ca ne passe peut-être pas par le contexte graphique du Container et donc lors des appels à clearRect il remet ce qu'il pense qu'il y a : rien.

    C'est possible que ca soit ca ?

    Merci de ton aide.

  4. #4
    Membre actif Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Points : 275
    Points
    275
    Par défaut
    Quand nous faisons un clearRect, le rectangle se remplit de la couleur background. Si cette couleur est opaque, évidemment on ne voit plus les composants qui sont derrière!

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Comment récupères tu les graphics que tu utilises?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Comment récupères tu les graphics que tu utilises?
    Je connais toujours les Container qui sont affichés, donc c'est avec la fonction getGraphics du container que je récupère les graphiques.

    Quand nous faisons un clearRect, le rectangle se remplit de la couleur background. Si cette couleur est opaque, évidemment on ne voit plus les composants qui sont derrière!
    Alors y a t-il une méthode qui se charge elle même de la superposition ou je dois moi même réafficher ce qu'il y avait derrière ce que je viens d'effacer. C'est uniquement pour cela que j'ai utilisé des containers, c'est pour ne pas avoir à gérer ca.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le getGraphics d'un composant Swing ne doit pas être utilisé pour obtenir les Graphics d'un composant sur lequel on veut dessiner.

    Toute opération de dessin sur un composant Swing doit être fait dans sa méthode paintComponent que l'on aura redéfinie (ou dans toute méthode appelée par paintComponent et prenant en paramètre les Graphics fournis par la méthode PaintComponent).

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Je ne travaille pas avec Swing mais avec AWT, est-ce que je dois faire ce que tu dis pour la méthode paint ou c'est un fonctionnement différent ?

    Quand on appelle repaint(), le composant fait-il lui même un appel a paint() avec son contexte graphique ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour AWT il faut utiliser la méthode paint au lieu de paintComponent, c'est la seule différence. Le getGraphics est toujours à proscrire.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    D'accord merci, mais en ce qui concerne la superposition, comment je dois gérer les affichages si je veux que chacun de mes Containers ne s'effacent pas les uns les autres ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Le problème c'est que le code va être exécuté par une platine Blu-Ray et qu'elle a des capacités limitées et donc je ne peux pas me permettre de tout redessiner a chaque changement, je dois redessiner que ce qui change et ma question était est-il possible que les Containers et java gèrent ca eux seuls.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Enfin ça reste un peu abstrait tout ça, quel est le rôle des composants présents sous celui sur lequel tu dessines.

    Comment gère tu ton animation (timer, thread ???)

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Alors en fait c'est un système de menu.
    Les Menu (qui sont des Containers) contiennent chacun des images ainsi que des Button (qui sont aussi des Containers). Les animations qui sont chacunes dans des threads peuvent être appliquées aux Menu (images + Buttons) et aux Button (Images).

    Prenons un exemple, un menu A a 2 boutons qui ont chacun leur image, un des 2 boutons commande l'apparition d'un autre menu B, cette autre menu a une animation pour se mettre à sa place sur l'écran mais il passe par dessus le menu A durant cette animation, mon problème dans cette exemple serait que le menu B efface le menu A aux endroits où les images ou les boutons du menu B passent au dessus de ceux du menu A. Ce que je ne veux absolument pas.

    Est ce que lors d'appels a drawImage ou clearRect, les fonctions paint() des composants concernés sont appelées automatiquement ?

    Une autre contrainte est que je n'aurais pas accès au code des animations, elles seront codées ailleurs et pas par moi, j'ai juste accès à l'interface qu'elles devront implémenter. Donc je dois gérer la superposition des Container et leur contenu sans toucher au code des animations, peu importe les fonctions qui sont appelées dedans.

    Merci beaucoup de ton aide et de ton temps.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Personne n'a de solutions à mon problème ??

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah de fait les méthodes drawImage ou clearRect doivent être appelées dans la méthode paint de tes composants, pas en dehors.

    TOn problème d'effacement vient du fait que tu réalise des opérations sur les composants en dehors de la méthode paint.

    Ensuite c'est AWT qui gère en interne ce qui doit être redessiné. Grosso modo tout composant ayant subi un changement (déplacement & cie) déclenche une appel à repaint qui lui même déclenche un appel à paint. Le méthodes que tu cites au dessus ne déclenche pas de paint vu qu'elles sont elles même appelée dans le paint (sinon bonjour les boucles infinies).

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    D'accord, et donc si tout ce qui concerne le dessin des composants est fait dans la méthode paint() de ces composants, les Containers de derrière se réafficheront si ils le doivent ?

    Je vais tester ça et je te dirai demain si ca fonctionne.

    Merci beaucoup de ton aide.

  17. #17
    Membre actif Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par Cbonniot Voir le message
    les Containers de derrière se réafficheront si ils le doivent ?
    Attention: un objet qui se trouve derrière un autre n'est visible que si l'autre objet est transparent. Tu peux voir la rue par la fenêtre, mais pas à travers un mur!

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Oui bien sur mais ce que je voulais dire c'est que dans le cas où un Container qui était par dessus un autre change de position, le Container de derrière devra se réafficher.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    Est-ce que lorsque l'on fait un appel à update(), on doit appeler paint() dedans afin que le contexte graphique soit redessiné ou update() redessine lui même ?

    Merci.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pourquoi aurais tu besoin de faire un appel à update?
    Et pourquoi devrais tu redéfinir la méthode update?

Discussions similaires

  1. [XL-2010] Superposition de plusieurs graphes dans un seul
    Par Matrixmax dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 19/02/2013, 18h44
  2. [Débutant] superposition entre plusieurs images
    Par crespo 12 dans le forum Images
    Réponses: 1
    Dernier message: 25/06/2012, 12h57
  3. [AC-2007] [SQL/VBA] Superposition de plusieurs graphiques
    Par Tifriis dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/12/2010, 10h19
  4. Réponses: 1
    Dernier message: 09/11/2009, 12h30
  5. Superposer plusieurs containers
    Par jaujau dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 28/03/2008, 16h27

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