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

2D Java Discussion :

Repaint() et rafraichissement


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 42
    Par défaut Repaint() et rafraichissement
    Bonjour,
    Voila, j'ai tenté de faire ce tutorial : http://duj.developpez.com/tutoriels/java/dessin/intro/
    Il est bien expliqué et tout fonctionne très bien à une exception près, j'ai des bugs d'affichage.
    Le tuto permet de créer une application qui ajoute un carré rouge sur un JPanel avec un clic gauche de la souris et de les supprimer avec le clic droit.
    Pour l'ajout et le clic gauche ça fonctionne très bien, mais pour la suppression et le clic droit ça fonctionne moins bien: je suis obligé de redimensionner la fenetre pour voir le carré se supprimer.
    Et pourtant la methode qui ajoute et la méthode qui supprime appellent toutes les deux repaint() à la fin (je précise que ce repaint est bel et bien appellé à chaque fois).
    J'ai cherché un peu partout comment vider totalement un JPanel pour pouvoir redessiner ensuite sur un JPanel vide, mais je n'ai trouver que des revalidate() etc... et ça ne fonctionne toujours pas.
    Je précise aussi que je ne peux pas dessiner un rectangle blanc sur le fond pour avoir un JPanel tout blanc car derriere ces carrés il y aura quelque chose d'affiché que j'aimerai eviter d'avoir à rafraichir si possible (affichage d'un svg, c'est pas hyper rapide)

    Voila, merci de votre aide

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    À ce que je comprends de la méthode paint de JCanvas, ce serait parce qu'elle dessine bien les carrés, mais elle néglige d'effacer ceux qui sont déjà dessinés et qui viennent d'être effacés dans le modèle, si vous voyez ce que je veux dire. Suite à un redimenssionnement, tout s'efface bien, parce que sur un redimenssionnement la mécanique interne de swing efface tout le panel d'abord.

    Bref, cela vient à mon avis d'un bug de conception, non d'un bug d'usage du paint, repaint et validate et consort.

    Pour le corriger, une possibilité est de l'effacer sur le panel directement depuis la méthode removeDrawable, qui sait, bien sûr, quel est le rectangle à effacer. Après l'appel à drawables.remove(d);, l'appel à repaint deviendrait inutile (sauf si l'on veut redessiner un rectangle qui serait dessous le rectangle qui vient d'être effacé).

    Il reste qu'il faut bien effacer avec quelque chose, c'est à dire une couleur... Un pinceau transparent ? la couleur du fond ? À toi de voir.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 42
    Par défaut
    Merci de ta réponse.
    J'ai essayé avec tes conseils de modifier la couleur des Drawables par transparent et effectivement ils s'ecrivent bien en transparent sur l'interface seulement voila il reste toujours l'ancien derriere qui n'est pas réactualisé (donc supprimé).
    Et pour la deuxieme solution je ne peux pas dessiner la forme avec la couleur de fond puisque celle-ci sera en fait un fond de carte en SVG (dessinée avec batik) qui elle meme peut etre simplement un trait sur un fond transparent. Donc meme si j'appelle le repaint de mon fond de carte ça n'aurait pour effet que d'inscrire un trait au dessus de mon ancienne forme :s
    N'y a-t'il pas une methode permettant d'effacer entierement un JPanel (la meme qui serait appellée lorsqu'on redimensionne la fenetre) ?

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Le paint qui est appelé lorsque tu redessines tout à cause d'un redimenssionnement est simplement le paint général. Il n'y a pas de mystère de ce coté là.

    Si tu veux redessiner sans redessiner, deux pistes :

    - Utilise des layers, et place tes rectangles un cran au dessus de ton svg. Avec un peu de chance, rendre transparent le layer rectangle du haut rendra à nouveau visible le svg du bas automatiquement.

    - Dessine ton SVG dans une image, dont tu n'auras plus qu'à rafficher les portions concernées sur effacement d'un rectangle. (le raffichage de la portion d'image simulera l'effacement du rectangle).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 42
    Par défaut
    Merci de ton aide.
    Le probleme est reglé, j'ai réécri mon script avec uniquement des Polygon et j'utilise la methode paintComponent et je fais monPolygon.invalidate() avant sur l'ensemble de mes Polygons.

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

Discussions similaires

  1. problème de rafraichissement repaint()
    Par toma03 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 29/07/2009, 16h43
  2. Repaint et Rafraichissement
    Par Mister_Kp dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 22/05/2008, 11h11
  3. Réponses: 4
    Dernier message: 08/10/2006, 15h16
  4. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  5. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08

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