J'utilise JSlider dans une fen=EAtre. Quand on clique =E0 c=F4t=E9 du curse=
ur
(=E0 gauche ou =E0 droite), le curseur est d=E9cal=E9 de 1.
J'aimerais modifier la valeur du d=E9calage. D'apr=E8s la javadoc,
setExtent devrait permettre de faire =E7a (?), mais =E7a ne fonctionne pas
(le d=E9calage est toujours de 1).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Yliur
Le Tue, 4 May 2010 06:48:49 +0200 Yliur a écrit :
Bonjour
J'utilise JSlider dans une fenêtre. Quand on clique à côté du cur seur (à gauche ou à droite), le curseur est décalé de 1.
J'aimerais modifier la valeur du décalage. D'après la javadoc, setExtent devrait permettre de faire ça (?), mais ça ne fonctionne pas (le décalage est toujours de 1).
Des suggestions ?
Yliur
Une solution...
Ce n'est pas le composant JSlider qui gère ça, mais l'objet chargé de le représenter. Pour pouvoir appliquer plusieurs thèmes graphiques différents sur un même composant (Métal, Motif, ...), Java sépare l es deux aspects en deux objets. La classe chargée du rendu d'un objet JSlider dans le thème Métal est MetalSliderUI. Il est possible de cré er une classe qui hérite de MetalSliderUI (pour conserver l'apparence de l'objet et l'essentiel de son comportement) et d'associer cette classe de rendu à la glissière.
JSlider glissiere = new JSlider (...) ; glissiere.setUI (new MaClasseDeRenduHeritantDeMetalSliderUI()) ;
Dans cette classe héritée de MetalSliderUI, il faut modifier la métho de scrollDueToClickInTrack, qui est appelée quand on clique à côté du curseur. Cette méthode doit simplement appeler scrollByBlock plutôt que scrollByUnit (voir le code source de la méthode héritée).
Voilà, c'est à peu près ça.
Le Tue, 4 May 2010 06:48:49 +0200
Yliur <yliur@free.fr> a écrit :
Bonjour
J'utilise JSlider dans une fenêtre. Quand on clique à côté du cur seur
(à gauche ou à droite), le curseur est décalé de 1.
J'aimerais modifier la valeur du décalage. D'après la javadoc,
setExtent devrait permettre de faire ça (?), mais ça ne fonctionne pas
(le décalage est toujours de 1).
Des suggestions ?
Yliur
Une solution...
Ce n'est pas le composant JSlider qui gère ça, mais l'objet chargé de
le représenter. Pour pouvoir appliquer plusieurs thèmes graphiques
différents sur un même composant (Métal, Motif, ...), Java sépare l es
deux aspects en deux objets. La classe chargée du rendu d'un objet
JSlider dans le thème Métal est MetalSliderUI. Il est possible de cré er
une classe qui hérite de MetalSliderUI (pour conserver l'apparence de
l'objet et l'essentiel de son comportement) et d'associer cette classe
de rendu à la glissière.
JSlider glissiere = new JSlider (...) ;
glissiere.setUI (new MaClasseDeRenduHeritantDeMetalSliderUI()) ;
Dans cette classe héritée de MetalSliderUI, il faut modifier la métho de
scrollDueToClickInTrack, qui est appelée quand on clique à côté du
curseur. Cette méthode doit simplement appeler scrollByBlock plutôt que
scrollByUnit (voir le code source de la méthode héritée).
J'utilise JSlider dans une fenêtre. Quand on clique à côté du cur seur (à gauche ou à droite), le curseur est décalé de 1.
J'aimerais modifier la valeur du décalage. D'après la javadoc, setExtent devrait permettre de faire ça (?), mais ça ne fonctionne pas (le décalage est toujours de 1).
Des suggestions ?
Yliur
Une solution...
Ce n'est pas le composant JSlider qui gère ça, mais l'objet chargé de le représenter. Pour pouvoir appliquer plusieurs thèmes graphiques différents sur un même composant (Métal, Motif, ...), Java sépare l es deux aspects en deux objets. La classe chargée du rendu d'un objet JSlider dans le thème Métal est MetalSliderUI. Il est possible de cré er une classe qui hérite de MetalSliderUI (pour conserver l'apparence de l'objet et l'essentiel de son comportement) et d'associer cette classe de rendu à la glissière.
JSlider glissiere = new JSlider (...) ; glissiere.setUI (new MaClasseDeRenduHeritantDeMetalSliderUI()) ;
Dans cette classe héritée de MetalSliderUI, il faut modifier la métho de scrollDueToClickInTrack, qui est appelée quand on clique à côté du curseur. Cette méthode doit simplement appeler scrollByBlock plutôt que scrollByUnit (voir le code source de la méthode héritée).