2009-11-23 114 views

回答

2

如果您使用的是基本版本的JScrollBar,那麼它可能使用BasicScrollBarUI進行渲染。我建議你擴展BasicScrollBarUI來創建一個自定義的UI類(比如MyBasicScrollBarUI)。這些按鈕是超類中的受保護變量。因此,您需要重寫子類中的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 2009-11-24 03:39:55

+0

@camickr:同意。擴展基本用戶界面只是說明可能的解決方案的最簡單方法。 – Thimmayya 2009-11-24 03:45:10

+0

@Thimmayya我嘗試了代碼,而箭頭圖標消失後,按鈕仍然存在。我剛剛編輯我的問題,指定刪除按鈕。謝謝你的想法。 – asawilliams 2009-11-24 16:12:00

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 
} 

}

刪除按鈕讓空間即可。我發現make按鈕是最簡單的方法。

+0

這工作完美! – 2012-09-04 18:36:51

0

這不是最優雅的方式......但對我的作品

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