2010-06-02 12 views
2

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é?

alt text

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() 
    } 

} 
+0

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

+0

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

+0

@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

Répondre

2

Remplacer getThumbSize(), retournant les dimensions du rectangle de délimitation de votre pouce. Si ce n'est pas symétrique, vous devez tenir compte du orientation du curseur.

Addenda: En aparté, le haut du pouce n'a pas "tombé"; il a été coupé. Voir Painting in AWT and Swing pour plus d'informations sur le rectangle de clip .