JScrollPane의 스크롤 막대에서 스크롤 막대 화살표 버튼을 제거하고 싶습니다. 어떻게하면 좋을까요?JScrollPane에서 스윙 스크롤 막대의 화살표 제거
3
A
답변
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 클래스의 인스턴스에 전달할 수 있습니다.
참고 : 필자는이 시도를 직접 시도하지 않았지만 코드에서 작동 할 수있는 것처럼 보입니다.
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);
}
당신은 아마 "기본"UI를 확장하지해야 작동합니다. 그렇게하면 모든 LAF 사용자 정의가 손실됩니다. 따라서 MetalScrollBarUI를 확장하거나 LAF에 사용되는 UI를 확장해야합니다. – camickr
@camickr : 그것에 동의하십시오. 기본적인 UI를 확장하는 것이 가능한 해결책을 설명하는 가장 쉬운 방법이었습니다. – Thimmayya
@Thimmayya 코드를 시도하고 화살표 아이콘이 사라진 동안 버튼이 여전히 있습니다. 방금 버튼 제거를 지정하기 위해 질문을 편집했습니다. 생각에 감사드립니다. – asawilliams