2010-06-02 20 views
2

圖片解釋了這一切。我畫了一個新的拇指,當它高於95或低於5時,JSlider區域就會熄滅。我試過填充軌道沒有成功。使用paintThumb在0或100時,我已經使我的箭頭脫離JSlider,這怎麼解決?

alt text

沒有人有什麼祕訣嗎?

這是我的代碼。我相信我的問題很好,在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

又一次,你問了一個問題,我們不能幫你(我看到你刪除了最後一個)。你編寫了自定義代碼,你顯然在代碼中有一個錯誤。由於您尚未發佈SSCCE(http://sscce.org),您希望我們對此做些什麼?我們不知道你有什麼改變。如果您發佈顯示舊代碼的SSCCE並強調您已更改的內容,那麼可能有人會慷慨地查看代碼。否則,我們不介意讀者,也無法猜測你做了什麼。 – camickr 2010-06-03 00:22:59

+0

我感謝你的幫助,但似乎其他人能夠「讀我的腦海」併發布信息,並推動我朝着幫助我的方向前進。 – Landmine 2010-06-03 06:16:02

+0

@Landmine:作爲http://sscce.org/的粉絲,我不會太快折扣camickr的建議。創建一個提供了相當多的洞察力,偶爾會揭示一個直接的解非常好的漸變,順便說一句。 – trashgod 2010-06-03 13:33:56

回答

相關問題