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 :

Soucis skinning JScrollbar


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Par défaut Soucis skinning JScrollbar
    J'ai un petit soucis, j'ai fait une UI relativement basique pour une JScrollbar.

    Jusque là tout va bien j'ai le résultat que je veux :

    (cliquer pour agrandir l'image)


    Ensuite lorsque je scroll à la molette ou que je drag cette barre, j'ai un petit soucis d'affichage comme ci-dessous et je n'arrive pas à le régler. Lorsque je scroll à l'aide des boutons je n'ai aucun soucis. J'ai remarqué que si je re-dimensionne un peu la fenêtre, les bugs d'affichages disparaissent

    (cliquer pour agrandir l'image)


    Voici le code de mon UI:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.plaf.basic.BasicScrollBarUI;
     
    /**
     *
     * @author gz
     */
    public class ScrollBarModified extends BasicScrollBarUI {
     
        public static int ROUND_WIDTH = 10;
        public static int Y_OFFSET = 5;
        public static Color DRAW_COLOR = new Color(77, 77, 77);
     
        public ScrollBarModified() {
            super();
        }
     
        protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
            Graphics2D buffer = (Graphics2D) g;
            buffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            buffer.setStroke(new BasicStroke(1.0f));
     
            buffer.setColor(DRAW_COLOR);
            buffer.fillRoundRect(thumbBounds.x + 2, thumbBounds.y + 2, thumbBounds.width, thumbBounds.height - 3 - Y_OFFSET, ROUND_WIDTH, ROUND_WIDTH);
        }
     
        protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
            Graphics2D buffer = (Graphics2D) g;
            buffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            buffer.setColor(new Color(0, 0, 0));
            buffer.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height);
            buffer.setColor(DRAW_COLOR);
            buffer.drawRoundRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height - Y_OFFSET, ROUND_WIDTH, ROUND_WIDTH);
        }
     
        protected void installComponents() {
            switch (scrollbar.getOrientation()) {
                case JScrollBar.VERTICAL:
                    incrButton = createIncreaseButton(SOUTH);
                    decrButton = createDecreaseButton(NORTH);
                    break;
     
                case JScrollBar.HORIZONTAL:
                    if (scrollbar.getComponentOrientation().isLeftToRight()) {
                        incrButton = createIncreaseButton(EAST);
                        decrButton = createDecreaseButton(WEST);
                    } else {
                        incrButton = createIncreaseButton(WEST);
                        decrButton = createDecreaseButton(EAST);
                    }
                    break;
     
            }
     
            //scrollbar.add(incrButton); // Comment out this line to hide arrow
            //scrollbar.add(decrButton); // Comment out this line to hide arrow
     
            scrollbar.setBackground(new Color(0, 0, 0));
            // Force the children's enabled state to be updated.
            scrollbar.setEnabled(scrollbar.isEnabled());
        }
    }
    Merci d'avance !

  2. #2
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Par défaut
    Je me permet de remonter le sujet, quelqu'un aurait ne serait-ce qu'une mini idée ? ce truc m'empêche de sortir la dernière version de mon logiciel :/

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ton problème vient du fait que tu dessines un thumb plus large que les thumbound. ceci étant dû à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer.fillRoundRect(thumbBounds.x + 2, thumbBounds.y + 2, thumbBounds.width, thumbBounds.height - 3 - Y_OFFSET, ROUND_WIDTH, ROUND_WIDTH);
    en effet x+2+thumbBounds.width est trop large de 2 pixel qui en dehors des bounds du thumb et de fait ne sont jamais rafraichis par la JScrollBar vu qu'elle ne raffraichi que le contenu des bonds en général pour un souci de performance.

    Donc au lieu de mettre des +2 à cet endroit, débrouille toi plutôt pour changer l'affichage des tracks.

  4. #4
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Par défaut
    Ahh le truc tout con…

    merci beaucoup sinok !

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

Discussions similaires

  1. souci de modification du skin
    Par tt1986 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 27/03/2010, 17h02
  2. Création d'un nouveau skin
    Par TOM-Z dans le forum XMLRAD
    Réponses: 8
    Dernier message: 18/03/2003, 17h14
  3. Skins
    Par Pm dans le forum XMLRAD
    Réponses: 7
    Dernier message: 26/02/2003, 16h12
  4. Réponses: 4
    Dernier message: 16/02/2003, 12h16
  5. Réponses: 2
    Dernier message: 03/10/2002, 17h24

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