2009-11-23 6 views

답변

2

JScrollBar의 기본 버전을 사용하는 경우 아마도 BasicScrollBarUI를 사용하여 렌더링 할 것입니다. BasicScrollBarUI를 확장하여 MyBasicScrollBarUI와 같은 사용자 정의 UI 클래스를 만드는 것이 좋습니다. 단추는 수퍼 클래스의 보호 된 변수입니다. 따라서 하위 클래스의 installComponents() 메서드를 재정의하고 버튼을 추가하지 않아야합니다. 아래의 코드 스 니펫을보고 거기에 제안 된대로 행을 숨 깁니다.

protected void installComponents(){ 
    switch (scrollbar.getOrientation()) { 
    case JScrollBar.VERTICAL: 
     incrButton = createIncreaseButton(SOUTH); 
     decrButton = createDecreaseButton(NORTH); 
     break; 

    case JScrollBar.HORIZONTAL: 
     if (scrollbar.getComponentOrientation().isLeftToRight()) {  
      incrButton = createIncreaseButton(EAST); 
      decrButton = createDecreaseButton(WEST); 
     } else { 
      incrButton = createIncreaseButton(WEST); 
      decrButton = createDecreaseButton(EAST); 
     } 
     break; 
    } 
    scrollbar.add(incrButton); // Comment out this line to hide arrow 
    scrollbar.add(decrButton); // Comment out this line to hide arrow 
    // Force the children's enabled state to be updated. 
scrollbar.setEnabled(scrollbar.isEnabled()); 
} 

그런 다음, 당신이하는 JScrollBar를 초기화 한 후 코드에서, 당신의 setUI()를 호출하고 MyBasicScrollBarUI 클래스의 인스턴스에 전달할 수 있습니다.

참고 : 필자는이 시도를 직접 시도하지 않았지만 코드에서 작동 할 수있는 것처럼 보입니다.

+0

당신은 아마 "기본"UI를 확장하지해야 작동합니다. 그렇게하면 모든 LAF 사용자 정의가 손실됩니다. 따라서 MetalScrollBarUI를 확장하거나 LAF에 사용되는 UI를 확장해야합니다. – camickr

+0

@camickr : 그것에 동의하십시오. 기본적인 UI를 확장하는 것이 가능한 해결책을 설명하는 가장 쉬운 방법이었습니다. – Thimmayya

+0

@Thimmayya 코드를 시도하고 화살표 아이콘이 사라진 동안 버튼이 여전히 있습니다. 방금 버튼 제거를 지정하기 위해 질문을 편집했습니다. 생각에 감사드립니다. – asawilliams

2
class NoArrowScrollBarUI extends BasicScrollBarUI { 


protected JButton createZeroButton() { 
    JButton button = new JButton("zero button"); 
    Dimension zeroDim = new Dimension(0,0); 
    button.setPreferredSize(zeroDim); 
    button.setMinimumSize(zeroDim); 
    button.setMaximumSize(zeroDim); 
    return button; 
} 

@Override 
protected JButton createDecreaseButton(int orientation) { 
    return createZeroButton(); 
} 

@Override 
protected JButton createIncreaseButton(int orientation) { 
    return createZeroButton(); 
} 


@Override 
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { 
    //own painting if needed 
} 

@Override 
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { 
    //own painting if needed 
} 

}

제거 버튼을 누른 다음을위한 공간을 수 있습니다. 가장 간단한 방법으로 제로 버튼을 찾았습니다.

+0

이것은 완벽하게 작동합니다! –

0

그것은 가장 우아한 방법은 아닙니다 ...하지만 나를

JScrollBar jsb = getHorizontalScrollBar(); 
     for(Component c : jsb.getComponents()) { 
      jsb.remove(c); 
     }