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 :

[JScrollPane][paint] pas de repaint


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut [JScrollPane][paint] pas de repaint
    Bonjours,

    j'ai un de ces inombrables problèmes de paint et celui là je ne l'ai pas trouvé dans le forum:

    je dessine dans un JPanel puis j'ajoute le JPanel à un JScrollPane qui est ensuite ajouté au contentPane d'une JFrame. Aux passages, je fais un repaint() sur tout ces components histoire d'être sûre.

    Le problème est que lorsque l'on redimentionne la fenetre par exemple, on voit bien que repaint fonctionne mais quand on utilise la sroll barre ill n'y a pas de repaint.

    Quelque'un a-t-il une solution?

    Est-ce une histoire de devoir dire à un propertyCangeListener, qui voit quand on bouge la scroll barre, qu'il doit effectuer le repaint?? (et à ce moment là avez vous des précisions car s'arretent ici mes compétence en java!?)

    Merci pour votre patience,

    Yann

  2. #2
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Aucun evenement a traiter mais ton objet Graphics passe a paint() aura une zone de clipping correspondant a la vue du scrollpane. Tu dois faire quelque chose de mal dans ton code

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    A la rigueure je peux te montrer mon code en espérant qu'il ne soit pas trop chiant à capter...

    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
     
    public class MainFrame extends JFrame {
     
        public MainFrame() {
     
            Graph panel = new Graph();
            //panel.repaint();
            JScrollPane scroll_pane = new JScrollPane();
            scroll_pane.getViewport().add(panel);
            //scroll_pane.repaint();
            this.getContentPane().add(scroll_pane, BorderLayout.CENTER);
     
        }
     
        public class Graph extends JPanel {
     
            public Graph(){
                MainFrame parent = (MainFrame) getParent();
                setVisible(true);
                setPreferredSize(new Dimension(getMainframe().getContentPane().getWidth()-20, 
                        getMainframe().getMotif_collection().getPromoters().size()*30 + 70));
            }
     
            public void paint(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                int height = 60;
                for (int i=0; i < promoters_names.length; i++) {
                    paintLine(g2, height, (String) promoters_names[i], (HashMap) collection.get(promoters_names[i]));
                    height += 30;
                }
            }
     
    etc...
    et vraiment je ne vois pas ce qu'il y a de mal dans mon code?!

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ne surcharge pas paint() mais paintComponent(), ca devrait regler le probleme.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Yep bah c'est pas si trivial que ça puisque j'ai essayé de faire ta méthode comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scroll_pane.paintComponents(panel.getGraphics());
    ça ne change rien
    et j'ai même essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scroll_pane.getViewport().repaint(scroll_pane.getViewportBorderBounds());
    et rien de mieu.

    Y'a toujours des problèmes avec paint()...

  6. #6
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Oula pourquoi tu appelles paintComponents() et repaint(bounds) ? Tu n'as RIEN A FAIRE sur un scrolling. Surcharge la methode paintComponent() de ton Graph, c'est tout. Laisse faire le JScrollPane pour le reste.

    En faisant ce que tu fais, tu fous le bordel dans le systeme de dessin de Swing :p

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Je ne comprends pas.
    J'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    paintComponent(g2);
    dans la méthode paint() mais rien
    et j'ai aussi testé (pas en meme temps évidement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    panel.paintComponents(panel.getGraphics());
    mais vraiment je vois pas ce que ça signifie d'appeller paintComponent(). C'est juste il resdessine (d'ailleur on le voit bine puisque les couleures sont plsu sombres).
    Je dois pas saisir aussi la signification de surcharger paintComponent de Graph (graph qui est un JPanel n'a que paintCoponents et paintComponent [sans s] ne marche que dans la méthode paint() ).[/code]

  8. #8
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Je ne t'ai pas dit d'appeler paintComponent() mais de le surcharger. Remplace la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void paint(Graphics g) {
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void paintComponent(Graphics g) {
    Ensuite n'appelle pas repaint(), n'appelle pas paint(), n'appelle pas paintComponent() (avec ou sans 's').

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Ok surcharger paint par paintComponent!...

    ...

    Mais ça marche pas!
    Vraiment c'est dingue.
    Le dessin est bien "repainté" quand on bouge les dimensions de la fenetre ou qu'on cache puis fait réaparaitre mais que dalle quand on bouge la scroll pane...
    Ca t'es déjà arrivé d'être dans ce cas? J'imagine qu'il y a 1000 personnes qui l'ont fait avant moi et qui ne devraient pas avoir galéré autant...

  10. #10
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Peux-tu montrer un code executable et complet qui reproduit ton probleme ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Oui ça roule mais laisse moi juste 2 secondes histoires de fucionner 2 classes pour que tu te casse moin la tete.
    Et au passage je suis tomber sur ce liens interessant
    http://java.sun.com/products/jfc/tsc.../painting/#mgr
    qui me donnerait envie de tester vers avec le repaitnManager. J me grouille et merci pour ta patience en tout cas

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Ton mail est celui de ta page web?
    Parcequ'en fait ça serait plus simple que je te passe tout mon prog en l'état et zipé (il est pas gros du tout il se compiule tout seul dans un ide par exemple)

  13. #13
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Oui c'est le bon mail mais un repaint manager ne va pas resoudre ton probleme.

  14. #14
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Quelque chose que tu n'as pas montre ici mais qui est dans ton code est la cause du probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setBackground(new Color(130,100,200,115));
    C'est dans ton constructeur de Graph. Tu attribues une couleur transparente a ton panneau. Or pour faire son travail correctement, Swing doit savoir si un composant est opaque ou non. Dans ton cas il ne l'est pas. Tu resoudras tes souci en supprimant cette ligne ou alors en rajoutant juste avant la ligne setOpaque(false).

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    T'es un pro!
    C'est quand même tendu de le capter ce petit détail.
    Je te remerci énormément et vous félicite tous à donner autant de votre temps (gratuitement qui plus est?!)

    Yan

  16. #16
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ah ben voila, la on voit la ligne en question dont je parle dans ma reponse precedente

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

Discussions similaires

  1. [JPanel] paint, paintComponent et repaint ?
    Par Pill_S dans le forum Composants
    Réponses: 8
    Dernier message: 08/02/2013, 17h38
  2. Réponses: 7
    Dernier message: 08/02/2010, 10h51
  3. Paint pas fait sur JTextPane+JScrollPane
    Par visiwi dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/02/2008, 20h53
  4. [Swing][JScrollPane] ne pas scroller avec le clavier
    Par Piolet dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 23/01/2008, 16h01
  5. [JScrollPane]pas de barre de defilement !!!
    Par let_me_in dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 04/01/2006, 10h15

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