2012-03-09 51 views
2

假設我在Image() 裏面有適當大小的圖像我想將JScrollBar組件的Thumb或旋鈕更改爲此圖像。如何將JScrollbar的Thumb更改爲自定義圖像

我知道我需要繼承ScrollBarUI

這是我在目前位置。

public class aScrollBar extends JScrollBar { 

    public aScrollBar(Image img) { 
     super(); 
     this.setUI(new ScrollBarCustomUI(img)); 
    } 

    public class ScrollBarCustomUI extends BasicScrollBarUI { 

     private final Image image; 

     public ScrollBarCustomUI(Image img) { 
      this.image = img; 
     } 

     @Override 
     protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { 
      Graphics2D g2g = (Graphics2D) g; 
      g2g.dispose(); 
      g2g.drawImage(image, 0, 0, null); 
      super.paintThumb(g2g, c, thumbBounds); 
     } 

     @Override 
     protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { 
      super.paintTrack(g, c, trackBounds); 
     } 


     @Override 
     protected void setThumbBounds(int x, int y, int width, int height) { 
      super.setThumbBounds(0, 0, 0, 0); 
     } 


     @Override 
     protected Dimension getMinimumThumbSize() { 
      return new Dimension(0, 0); 
     } 

     @Override 
     protected Dimension getMaximumThumbSize() { 
      return new Dimension(0, 0); 
     } 
    } 
} 

現在我沒有看到任何的拇指,只有一個軌道,當我嘗試點擊ScrollBar。

我檢出了this文章,看到有人推薦你閱讀this,但他沒有提到圖片,所以這是我想出的。

希望有人能幫助我,謝謝!

+2

當您指定非空邊界和大小時會發生什麼?你嘗試過'MetalScrollBarUI'嗎?請修改您的問題以包含[sscce](http://sscce.org/)。 – trashgod 2012-03-09 07:02:05

+0

@Epicmaster +1的問題,不知道... – mKorbel 2012-03-09 08:40:32

+0

請學習java命名約定並堅持他們 – kleopatra 2012-03-31 09:39:42

回答

0

的問題是:

g2g.drawImage(image, 0, 0, null); 

你必須使用當前拇指位置爲出發點繪製。我想這一定是thumbRect.x和thumbRect.y,所以:

g2g.drawImage(image, thumbRect.x, thumbRect.y, null); should work. 

另外,我不知道你在paintThumb超級方法的調用。這行不會覆蓋你的定製的東西?

而且:應該忽略處理的調用。

0

你爲什麼打電話g2g.dispose()?它破壞了圖形對象,所以它不能畫拇指。嘗試在paintThumb方法中刪除此呼叫。下面是繪製自定義縮略圖的示例:

@Override 
    protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { 
     if (thumbBounds.isEmpty() || !scrollbar.isEnabled()) { 
      return; 
     } 
     g.translate(thumbBounds.x, thumbBounds.y); 
     g.drawRect(0, 0, thumbBounds.width - 2, thumbBounds.height - 1); 
     AffineTransform transform = AffineTransform.getScaleInstance((double) thumbBounds.width 
       /thumbImg.getWidth(null), (double) thumbBounds.height/thumbImg.getHeight(null)); 
     ((Graphics2D) g).drawImage(thumbImg, transform, null); 
     g.translate(-thumbBounds.x, -thumbBounds.y); 
    } 
相關問題