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 !