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 :

Graphics débordant sur des scrollbar


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Par défaut Graphics débordant sur des scrollbar
    Bonjour,

    J'ai un scrollPane avec des scrollBar.
    Ce scrollPane contient un panel customisé (héritant de JPanel).
    J'ai implémenté la méthode paintComponent(Graphics g) de ce panel.
    Quand cette méthode génère un Graphics plus grand que le scrollPane, ce Graphics se dessine également sur mes scrollBar

    Une idée ?

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    comment assignes-tu le JPanel au JScrollPane ? Il faut utiliser la méthode setViewportView, et non add.

    Si je me suis planté, peux-tu nous montrer un peu de code ? On n'a pas assez d'éléments en main.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Par défaut
    Bonjour,

    Avant de lire le code, je vous explique un peu ce qu'il est censé faire. Je fais un utilitaire d'impression (avec previsualisation) pour des objets Component. Le bug dont je vous parle concerne la prévisualisation.

    Voila le source de ma classe gérant le scrollPane :

    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
     
    class JPreviewPanel extends JPanel {
            ...
            m_PreviewAreaPanel = new JPreviewAreaPanel();
            m_PreviewAreaPanel.setPreviewer(this);
     
            // construction du scrollPane
            //m_ScrollPane = new JScrollPane(m_PreviewAreaPanel);
            m_ScrollPane = new JScrollPane();
            m_ScrollPane.setViewportView(m_PreviewAreaPanel);
            // politique des scrollBar
            m_ScrollPane.setHorizontalScrollBarPolicy(JScrollPane.
                                                      HORIZONTAL_SCROLLBAR_ALWAYS);
            m_ScrollPane.setVerticalScrollBarPolicy(JScrollPane.
                                                    VERTICAL_SCROLLBAR_ALWAYS);
     
            this.add(m_ScrollPane);
            ...
    }
    Et ici, le source du panel inséré dans le scrollPane :

    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
     
    class JPreviewAreaPanel extends JPanel {
     
    public void paintComponent(Graphics g) {
            ...
            while (i < etendue && page == Printable.PAGE_EXISTS) {
     
                    ...
     
                    page = m_Printable.print(g, m_PageFormat, i + pageFirst - 1);
     
                    if (page == Printable.PAGE_EXISTS) {
                        pageCount++;
                        g.setColor(Color.black);
                        ((Graphics2D) g).drawRect( -1, -1,
                                                  (int) (m_PageFormat.getWidth() +
                                2),
                                                  (int) (m_PageFormat.getHeight() +
                                2));
                    }
     
                   ...
     
                }
     
                g.dispose();
     
    }
    Quand mon graphics devient trop grand, le résultat du print déborde sur l'espace prévu pour les scrollbar, mais pas le drawRect ... (voir bug_scrollbar.gif)

    Merci d'avance pour vos réponses
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Eh bien j'ai appris quelque chose, aujourd'hui. Apparemment le print ne fonctionne pas pareil (sûrement quelque chose de lié au clipBounds).

    Bref, une solution est de créer une BufferedImage, et d'appeler print sur les graphics de cette BufferedImage (ceci devrait se faire dans le constructeur de la classe JPreviewAreaPanel). Ensuite, il suffit de dessiner cette image dans paintComponent.

    En plus de résoudre le bug, cette approche augmentera probablement les performances.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Des informations sur les scrollbars
    Par MarsVolta dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/01/2008, 10h47
  2. Réponses: 1
    Dernier message: 14/12/2006, 22h47
  3. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29
  4. Réponses: 4
    Dernier message: 15/12/2002, 04h19
  5. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40

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