Bonjour,
je mets une image sur le curseur d'un slider comme suit en étendant la classe MetalSliderUI :
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
 
public class MonSliderUI extends MetalSliderUI {
	public void paintThumb(Graphics g) {
	//-------------------------------
		if (slider instanceof MonJSlider) {
			Image image = ((MonJSlider)slider).getImage();
			if (image == null) {
				Color userColor = ((MonJSlider)slider).getColor();
				g.setColor(userColor);
				g.fillOval(thumbRect.x, thumbRect.y, thumbRect.width, thumbRect.height);
			} else {
				int height = image.getHeight(null);
				int width = image.getWidth(null);
				int centerX = thumbRect.x + (thumbRect.width/2);
				int centerY = thumbRect.y + (thumbRect.height/2);
				g.drawImage(image, centerX-(width/2), centerY-(height/2), width, height, null);
				//on repaint le composant contenant l'image du thumb
				Component component = ((MonJSlider)slider).getComponent();
				component.repaint();
			}
		} else
			super.paintThumb(g);
	}
 
 
	/**
         * surchage de paintTrack : fleche vers le haut de couleur du slider et d'épaisseur 3
         */
	public void paintTrack(Graphics g) {
	//--------------------------------------
		if (slider instanceof MonJSlider) {
			Graphics2D g2d = (Graphics2D) g;
			Color userColor = ((MonJSlider)slider).getColor();
			g2d.setColor(userColor);
			//MonJSlider est un slider vertical
			//if faudrait rajouter du code si MonJSlider pourrait être horizontal
			int x = trackRect.x + trackRect.width/2;
			//sauvegarde de l'épaisseur du trait
			Stroke s = g2d.getStroke();
			//trait épais
			g2d.setStroke(new BasicStroke(3));
			g2d.drawLine(x, trackRect.y, x, trackRect.y+trackRect.height);
			g2d.drawLine(trackRect.x, trackRect.y+10, x, trackRect.y);
			g2d.drawLine(trackRect.x + trackRect.width, trackRect.y+10, x, trackRect.y);
			//retour au trait "normal"
			g2d.setStroke(s);
 
			drawSelected(g2d);
		} else
			super.paintTrack(g);
	}
Parfois cette image est un peu large et la zone "clicable" ne représente pas l'intégralité de l'image. J'ai regardé du coté de la surcharge de la méthode getTickLength mais sans avoir l'effet escompté ...
Comment faire pour élargir la zone "clicable" ?

j'ai lu http://www.developpez.net/forums/sho...d.php?t=278697 qui approche mon pb mais sans donner la solution.

Merci de votre aide.