Uso paintThumb Ho fatto la mia freccia cadere l'JSlider quando a 0 o 100, come può essere risolto?
Domanda
L'immagine spiega tutto. Ho dipinto un nuovo pollice e si spegne la zona JSlider quando al superiore al 95 o al di sotto 5. Ho provato imbottitura la pista senza successo.
Qualcuno ha qualche consiglio?
Ecco il mio codice. Credo che il mio problema è bene girando la dimensione del pollice sotto l'override 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()
}
}
Soluzione
Ignora getThumbSize()
, restituendo le dimensioni del rettangolo di delimitazione del pollice. Se non simmetrica, si dovrebbe tenere conto del cursore orientation
.
Addendum: Per inciso, la parte superiore del pollice non "cadere"; è stato troncato. Vedere Pittura in AWT e Swing per ulteriori informazioni sul clip di rettangolo .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow