2012-03-09 4 views
2

Image() JScrollBar 구성 요소의 Thumb 또는 Knob을이 이미지로 변경하고 싶습니다.JScrollbar의 엄지 손가락을 사용자 정의 이미지로 변경하는 방법

나는 내가 지금에 어딘지 여기 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 주위를 클릭하려고 할 때 Thumb, Track 만 표시되지 않습니다.

this 기사를 보니 사람들이 너에게 this을 읽을 것을 권장했지만 어디에도 그가 이미지를 언급하지 않으므로 내가 생각해 냈습니다.

누군가 나를 도와 줄 수 있기를 바랍니다. 감사합니다.

+2

비어 있지 않은 범위 및 크기를 지정하면 어떻게됩니까? 'MetalScrollBarUI'를 사용해 보셨습니까? [sscce] (http://sscce.org/)를 포함하도록 질문을 편집하십시오. – trashgod

+0

질문에 대한 @Epicmaster +1, 아무 생각이 ... – mKorbel

+0

자바 명명 규칙을 배우고 그것들을 고수해주세요. – kleopatra

답변

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); 
    } 
관련 문제