La photo explique tout. J'ai peint un nouveau pouce et il sort de la zone JSlider à plus de 95 ou moins de 5. J'ai essayé de rembourrer la piste sans succès.Utiliser paintThumb J'ai fait tomber ma flèche du JSlider à 0 ou 100, comment cela peut-il être réparé?
Quelqu'un at-il des conseils?
Voici mon code. Je crois que mon problème est bien tourner la taille du pouce sous le remplacement de getThumbSize.
private static class MySliderUI extends BasicSliderUI {
private int thumbHeight = 22;
private int thumbWidth = 22;
public MySliderUI(JSlider b) {
super(b);
// this.thumbHeight = slider.getHeight();
// this.thumbWidth = slider.getHeight();
}
@Override
protected Dimension getThumbSize() {
return new Dimension(thumbHeight, thumbWidth);
}
@Override
public void paintTrack(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Rectangle r = trackRect;
r.width = 40; // (int) (0.15 * r.getHeight());
float[] dist = { 0.1f, 0.5f, 0.9f };
Color[] colors = { new Color(34, 177, 76), new Color(255, 242, 0),
new Color(237, 28, 36) };
Point2D start = new Point2D.Float(r.x, r.y);
Point2D end = new Point2D.Float(r.x, r.y + r.height);
LinearGradientPaint p = new LinearGradientPaint(start, end, dist,
colors);
g2d.setPaint(p);
g2d.fill(r);
}
@Override
public void paintThumb(Graphics g) {
Graphics2D g1 = (Graphics2D) g;
// Make a triangle - Arrow on Meter
int[] x = new int[3];
int[] y = new int[3];
int n; // count of points
// Set Points for Arrow
Integer arrowX = thumbRect.x;
Integer arrowY = thumbRect.y;
x[0] = arrowX - 25;
x[1] = arrowX - 25;
x[2] = arrowX - 2;
y[0] = arrowY - 17; // Top Left
y[1] = arrowY + 27; // Bottom Left
y[2] = arrowY + 5; // Tip of Arrow
n = 3; // Number of points, 3 because its a triangle
// Draw Arrow Border
Polygon myTriShadow = new Polygon(x, y, n); // a triangle
g1.setPaint(Color.black);
g1.fill(myTriShadow);
// Set Points for Arrow Board
x[0] = x[0] + 2;
x[1] = x[1] + 2;
x[2] = x[2] - 3;
y[0] = y[0] + 5;
y[1] = y[1] - 5;
y[2] = y[2];
// Color colorMeter = robot.getPixelColor(x[2]+10, y[2]);
// Draw Arrow
Polygon myTri = new Polygon(x, y, n); // a triangle
// Color colr = new Color();
g1.setPaint(Color.yellow);
g1.fill(myTri);
// super.paintThumb(g); // replace with your fill()
}
}
Encore une fois, vous avez posé une question que nous ne pouvons pas vous aider (je vous vois supprimé le dernier). Vous avez écrit du code personnalisé et vous avez évidemment un bug dans le code. Qu'attendez-vous de nous à ce sujet puisque vous n'avez pas posté de SSCCE (http://sscce.org)? Nous ne savons pas ce que vous avez changé. Si vous postez un SSCCE qui montre l'ancien code et met en évidence ce que vous avez changé, alors peut-être quelqu'un sera assez généreux pour regarder le code. Sinon, nous ne pensons pas aux lecteurs et ne pouvons pas deviner ce que vous avez fait. – camickr
Je vous remercie de votre aide, mais il semble que d'autres sont en mesure de «lire dans mon esprit» et de publier des informations et de me pousser dans une direction pour m'aider. – Landmine
@Landmine: En tant que fan du site http://sscce.org/, je n'insisterai pas trop vite sur la suggestion de camickr. Juste en créer un offre un aperçu considérable et révèle parfois une solution immédiate. Très beau dégradé, BTW. – trashgod