Bonjour,
Os : Windows XP SP2
Java : JRE 1.6
Dev : Eclipse
Voilà mon soucis, j'ai une un jSplitPane déclaré de la manière suivante :
J'utilise la classe SplitPaneUI pur surcharger l'apparence de mon jSplitPane
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 split = new JSplitPane(); split.setUI(new SplitPaneUI()); //split.setOneTouchExpandable(true);
divider = new SplitPaneDivider(this); le Divider est surchargé pour afficher au millieu du séparateur un petit point incrusté pour déplacer la jSplitPane.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class SplitPaneUI extends BasicSplitPaneUI { // ------------------------------------------------------------------------------------------------------------------ // Custom installation methods // ------------------------------------------------------------------------------------------------------------------ protected void installDefaults() { divider = new SplitPaneDivider(this);
Voici la surcharge avec la méthode paint :
Voilà mon soucis dès que la declaration de mon jsplitpane devient celle-ci :
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 public class SplitPaneDivider extends BasicSplitPaneDivider { private static final Color highlightColor = new Color(255,255,255,200); // ------------------------------------------------------------------------------------------------------------------ // Constructors and getter/setter methods // ------------------------------------------------------------------------------------------------------------------ public SplitPaneDivider(BasicSplitPaneUI ui) { super(ui); } // ------------------------------------------------------------------------------------------------------------------ // Overwridden methods from the superclass(es) // ------------------------------------------------------------------------------------------------------------------ public int getDividerSize() { return 7; } // ------------------------------------------------------------------------------------------------------------------ // Custom painting methods // ------------------------------------------------------------------------------------------------------------------ public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int h = this.getHeight(); int h2 = h/2; int ow = getDividerSize() - 2; int ow2 = ow/2; Ellipse2D vShape = new Ellipse2D.Double(1,h2-ow2,ow,ow); Paint p = new GradientPaint(1f, h2-ow2, Color.BLACK, ow,h2+ow2-1, Color.WHITE); g2d.setPaint(p); g2d.fill(vShape); Shape vOldClip = g2d.getClip(); g2d.setClip(vShape); g2d.setColor(highlightColor); g2d.fillOval(1+ow2,h2,ow2,ow2); g2d.setClip(vOldClip); } }
Avec l'utilisation setOneTouchExpandable pour avoir les petits boutons de reduction ou d'agrandissement de la splitpane : je ne vois pas ces boutons sauf si je passe la souris dessus !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 split = new JSplitPane(); split.setUI(new SplitPaneUI()); split.setOneTouchExpandable(true);
Je suppose que dans la méthode paint de la classe SplitPaneDivider je ne raffraichit pas la zone en question car si je ne fait pas de surcharge UI tout est normal !!!!
Pourriez vous me dire comment dans la methode paint obliger le rafraichissement du divider complet et non pas seulement le milieu où se trouve le petit point incruster.
où m'orienter vers autre chose si je fais complement fausse route
cldt,
vous pouvez voir la capture d'ecran :
La premiere est normal : SansOnetoucexpandable
La deuxieme on voit les petits boutons en haut uniquement quand la souris est passé dans la zone : AvecOneTouchExpandable
Partager