J'essaie de remplacer paintThumb pour afficher un curseur graphique. Tant que je ne plaisante pas avec la taille de l'image et que je la laisse peindre en fonction de la taille du pouce, l'image du pouce et le curseur fonctionnent correctement. Si je change la taille de thumbRect ou mon image, je ne peux pas saisir le pouce ou déplacer le curseur ne fonctionne plus. C'est un JSlider vertical.Java Swing JSlider (Vertical) thumbRect modifie le contrôle du curseur
NOTE: Merci à trashgod pour la solution. Voir dans le code.
NOTE2: MIS À JOUR POUR ÊTRE MAINTENANT UN EXEMPLE DE TRAVAIL ACCEPTABLE.
NOTE3: Le problème d'origine a été causé par le redimensionnement à l'intérieur de paintThumb.
Voici le curseur:
sliders[channel].setUI(new customSliderHandle(sliders[channel], busType));
est ici la classe:
private static class customSliderHandle extends BasicSliderUI {
String sBusType;
Image image;
public customSliderHandle(JSlider slider, String busType) {
super(slider);
sBusType = busType;
try {
if(sBusType.equals("ch")) {
//noinspection ConstantConditions
image = ImageIO.read(getClass().getClassLoader().getResource("web/images/black-slider.png"));
} else {
//noinspection ConstantConditions
image = ImageIO.read(getClass().getClassLoader().getResource("web/images/yellow-slider.png"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void calculateThumbSize() {
super.calculateThumbSize();
//// Fixed!!!
thumbRect.setSize(20, 40);
}
@Override
public void paintThumb(Graphics g) {
///// This was the original problem. Move into
///// calculateThumbSize() resolved the problem.
///// thumbRect.setSize(20, 40);
int x = thumbRect.x;
int y = thumbRect.y;
int width = thumbRect.width;
int height = thumbRect.height;
g.drawImage(image, x, y, width, height, null);
}
}
J'apprécie tellement SO et ceux qui aident! Je viens de mettre thumbRect.setSize (20,40) dans calculateThumbSize() override et cela a fonctionné. Je ne sais pas exactement comment simplifier la gestion de l'image, mais c'est certainement la réponse. Je mettrai à jour mon OP –
Si je déplace le ImageIO hors paintThumb et dans la méthode parente (customSliderHandle) et place la déclaration dans la classe (comme je l'ai fait avec sBusType) ça ira? –
@JohnSmith: Passer une référence dans le constructeur sonne bien. – trashgod