2011-11-21 35 views
11

我要設計這個滾動條爲我所有scrollpanes:定製設計JScollPane的Java Swing

enter image description here

用的Java Swing。我正在使用Netbeans IDE。什麼是最簡單的解決方案?

非常感謝。

問候

+0

我沒有得到你。當它包含的元素大小受到損害時,滾動窗格會自動插入滾動條。 – gprathour

回答

16

您可以通過定製Swing組件的外觀設置自定義UI。在滾動窗格中的滾動條的情況下,你做

scrollPane.getVerticalScrollBar().setUI(new MyScrollBarUI()); 

其中MyScrollBarUIjavax.swing.plaf.basic.BasicScrollBarUI的。要爲所有滾動條做到這一點(不僅僅在JScrollPane情況下),調用

UIManager.put("ScrollBarUI", "my.package.MyScrollBarUI"); 

創建任何Swing組件之前。

MyScrollBarUI,重寫以下方法:

public class MyScrollBarUI extends BasicScrollBarUI { 

    @Override 
    protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { 
     // your code 
    } 

    @Override 
    protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { 
     // your code 
    } 
} 

你的滾動條是圖形非常簡單,所以它應該不會太難實現。

+1

偉大的回答非常感謝你 –

+0

一定要重寫'保護無效[BasicScrollBarUI](http://docs.oracle.com/javase/6/docs/api/javax/swing/plaf/)中的paintTrack(Graphics g,JComponent c,Rectangle trackBounds)'和'paintThumb'(相同的方法簽名) basic/BasicScrollBarUI.html),否則你可能看不到任何東西。 – Nateowami

+0

是否有可能不硬編碼擴展BasicScrollBarUI,而是擴展當前使用的滾動條UI類?像'extends scrollBar.getUI()。getClass()'? – Bowi

0

不要忘記,如果你打算使用UIManager的覆蓋這樣

UIManager.put("ScrollBarUI", "my.custom.SimpleScrollBarUI"); 

那麼你SimpleScrollBarUI類的所有滾動條必須有createUI中的方法,即:

public class SimpleScrollBarUI extends BasicScrollBarUI { 

    public static ComponentUI createUI(JComponent c) { 
     return new SimpleScrollBarUI(); 
    } 

    //... 

}