[JSlider] Taille de la zone clicable
Bonjour,
je mets une image sur le curseur d'un slider comme suit en étendant la classe MetalSliderUI :
Code:
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.