J'ai créé un panel dont le fond est dégradé.
Je redessine un bord à ce panel, à 5 px du bord réel du panel.
Le dégradé ne doit s'afficher qu'à l'intérieur de ce bord, et à l'extérieur du bord, j'aimerais voir la couleur du composant parent par transparence.
Problème: si je ne redessine pas à l'extérieur de ce bord également, ça m'affiche des truc bizarre sur la bande de 5 pixels qui fait le tour du bord(par ex: un morceau du bouton qui se trouve au bas de l'écran, un bout de jtable...) et ça varie parfois quand je déplace ma souris
Du coup je redessine du gris a l'extérieur de mon bord pour éviter d'avoir n'importe quoi à la place, mais je ne vois plus le composant en arrière plan autour de mon bord par contre.
Comment puis faire pour que l'extérieur du bord que je dessine, soit transparent sans foirer ?
(Ne me dites pas de mettre des insets entre mes panels et de dessiner le bord sur le bord réel du JPanel, ce n'est pas envisageable (trop de refactoring) et de toute façon, dans les angles arrondis, le problème resterait le même)
Merci pour le coup de pouce.
Voici mon code:
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 @Override protected void paintComponent(final Graphics g) { super.paintComponent(g); final Graphics2D graphics = (Graphics2D) g.create(); try { graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // gradient background final GradientPaint gp = new GradientPaint(0, 0, color1, 0, getHeight(), color2); graphics.setPaint(gp); // draw the rounded rectangle (inside border) graphics.fillRoundRect(5, 0, getWidth() - 10, getHeight(), 20, 20); } finally { graphics.dispose(); } }![]()
Partager