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

Langage Java Discussion :

Problème de scintillement, pour deux classes ?


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut Problème de scintillement, pour deux classes ?
    Bonjour à tous,

    J'ai un programme dans lequel j'ai dessiné un champs textarea avec le dessin du texte (avec calcul de dimension et position). Tout en absolut. et j'ai juste à côté une scrollbar que j'ai également dessiné moi-même, avec une image en fond, et une image au dessus pour représenter le bouton à déplacer.

    Voici un screen : http://gaming-vision.fr/screen.png

    Vous voyez les points de couleurs sur ma scrollbar. C'est un peu comme du scintillement. En faite quand je déplace mon bouton de scrollbar, le contenu du viewport se déplace aussi, ducoup j'ai une sorte de décalage de l'image affiché sur ma scroll bar, alors que ce sont deux classes différentes pour la scroll, et le viewport.

    J'ai mis dans un (Graphics)buffer tout ce que je dessine dans le viewport, puis je l'affiche dans le viewport, et parallement je fais pareil avec le fond de ma scrollbar.

    Je ne comprends pas, sa scintille toujours.
    Comment faire pour un double buffering ?
    Est-ca la meilleur solution ?

    merci à vous
    Si vous ne comprenez pas, n'hésitez pas à me le faire savoir

    Encore merci ;p

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Peut-être une solution...
    Bonjour,

    Pour solutionner votre problème de scintillement, je crois qu'il vous faut utiliser un BuferredImage.
    BufferedImage imageMemoire = new BufferedImage(int largeur, int hauteur, int type), BufferedImage possède des fields définissant différents types, choisissez clui qui convient.
    Ensuite :
    Graphics2D zoneGraphique = imageMemoire.createGraphics();

    Puis,

    votreJComponent.paint(zoneGraphique);

    Le rôle du BuferredImage est de créer l'image résultante en mémoire et d'y appliquer les transformations (déplacement, mise à l'échelle etc...) avant de l'afficher à l'écran. Sans cela, vous 'verriez' se réaliser chaque transformation, ce qui se traduit par cet effet de scintillement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Merci à vous

    Je ne savais pas qu'une solution aussi simple s'imposait

    Je n'ai plus assez de temps pour essayer maintenant mais j'essaierai demain.
    Je vous préviens du résultat demain.

    Merci beaucoup pour votre aide.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut ça marche pô
    Bonjour à tous,

    J'ai essayé malgré la bonne mise en pratique du bufferedImage :p J'ai toujours ce soucis de scintillement. Je me demande si un doubleBuffering ne serait pas nécessaire entre le fond de la barre de scroll et le contenu du viewport ?

    Dites en moi si l'idée est bonne ?

    Merci à vous

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    j'ai cru comprendre que tu utilisais le 'null' Layout. C'est voulu?
    Il me semble bien que le ScrollPane et le null Layout ne font pas bon ménage. Et de manière générale, la pratique du nullLayout est fortement déconseillée.

  6. #6
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Ok...
    Désolé, mais sans plus de précision de votre code, je n'ai pas d'autres idées à vous proposer. Je reste cependant attentif aux différentes réponses qui vous seront proposées. Bon courage...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Merci d'avoir répondu
    J'utilise en faite un JLayeredPane, que j'ai dérrivé d'une classe (DiscussionMainLayout) dans laquelle je redessine le fond et la bordure.

    ensuite j'assossi dans ma fenetre JFrame grâce à setContentPane mon JLayeredPane :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DiscussionMainLayout affichage = new DiscussionMainLayout();
    setContentPane(affichage);
    Voilà
    Alors est-ce que vous pensez que cette pratique pourrait influer sur le comportement de mon JViewPort ?

    Merci à vous

  8. #8
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut D'accord...
    Je ne penses pas que cela est une influence. Encore que à ma connaissance, les LayeredPane n'ont d'interret que pour une hierarchisation des composant dans la profondeur, sur plusieurs couches. Il permet aussi de manipuler le GlassPane antre autre. Mais à mon avis ça n'a pas d'influence.
    Dans votre code, au niveau du dessin est-ce que vous prenez soins de faire un clearRect(....) avant de paindre, ou est-ce que vous paignez par-dessus ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Non mais je viens d'essayer aucun résultat. C'est bizard.
    Je vous remets dans le contexte :

    En faite j'ai une classe fenêtre JFrame. Dans laquelle j'ai un JLayeredPane.

    Je crée deux classes. La première représente l'image de fond de la scrollbar (extends JPanel). Dans cette classe même je crée une nouvelle classe (extends JPanel) (obligé à cause de paintComponent afin de déplacer l'image j'ai besoin de MouseMotion) qui contient l'image de mon bouton de scroll.

    Je crée une seconde classe (extends JPanel) dans la quelle je crée mon Textarea entierrement, dans lequel je positionne mon texte à l'aide de calcul, et je dessine plein de petits rectangles en guise d'icône.

    Dans ma classe JFrame je crée un JViewport dans lequel j'insert ma classe textarea.

    Ensuite grâce à mes évènements sur ma classe du bouton de la scrollBar, quand je deplace ce bouton je déplace le contenu du JViewPort. Je redessine le viewport, son contenu, et le fond de ma scrollbar toutes les 5 millisecondes pendant le déplacement du bouton.

    Tout est dessiné dans paintComponent. Car c'est un programme personnalisé en images, et en dessins, en position absolue pour mieux gérer les résolutions.


    Maintenant vous connaissez la hiérarchie du programme. J'ai également oublié de souligner que j'utilisais une BufferedImage pour le fond de ma scrollBar car comme vous pouvez le voir dans mon screen c'est lui qui subit des "problèmes", et pour mon textarea qui est affecté au JViewPort.

    Dans mon JLayeredPane j'ai placé en premier mon JViewport (indice "1") et ensuite j'ai placé ma scrollBar (indice "2")

    Voilà, avez-vous des suggestion à propos du codages, bufferedImage ?

    Merci à vous

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Je remercie tous ceux qui ont prits la peine de me lire et de me répondre.

    J'ai trouvé la solution qui consistait à ajouter un "repaint" du viewport après le "repaint" de la bar qui se daplce dans ma scroll.

    Bref j'ai trouvé, et je suis content

    J'aurais une dernière question.
    Java est une plateforme virtuelle très puissante cependant est-ce normal que le déplacement de ma bar de scroll étant synchronisé avec le déplacement du contenu de mon viewport, ne soit pas totalement fluide ?





    Je ne pense pas que se soit java, en faite je tiens également à poser une seconde question : Etant donné que la position du contenu dans le JViewport doit obligatoirement être indiquée en (INT)

    Je ne pouvais pas aboutir à un calcul de rapport pour le bouton de la scrollBar : pour un pixel on déplacera autant de pixels pour le viewport.

    Ducoup j'ai dû faire un calcul assez complexe pour aboutir sur un tableau dans lequel les index correspondaient aux pixels de déplacement du bouton de ma scrollbar, et la valeur d'index correspond à la position du contenu du viewport.

    Par conséquent on à un manque de fluidité dans le déplacement du contenu du viewport mais c'est peu remarquable. Et la scrollBar est un petit moins fluide car elle doit faire requête dans un tableau recalculé à chaque fois qu'on clique dessu.

    Vous voyez à quel point ça à pu être compliqué pour moi de mettre en place une scrollBar perso.

    Je me demandais, viendrais-je de rencontrer une des limites de java à savoir l'utilisation du (Int) qui limite considérablement l'utilisation du JViewPort, ou ai-je choisis une mauvaise solution ??

    Y en aurait-il d'autres beaucoup plus simples et efficaces ?

    Merci

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

Discussions similaires

  1. Problème de portée entre deux classes
    Par Shikette dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 13/11/2009, 22h32
  2. Problème d'inclusion entre deux classes.
    Par XavierHWT dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2009, 14h52
  3. Cast pour deux classe (heritage)
    Par moudz dans le forum C++
    Réponses: 1
    Dernier message: 10/04/2009, 12h25
  4. Réponses: 5
    Dernier message: 09/10/2008, 16h40
  5. Problèmes d'inclusion entre deux classes
    Par Invité dans le forum C++
    Réponses: 3
    Dernier message: 26/05/2008, 14h41

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