2011-11-21 14 views
11

muszę zaprojektować przewijania dla wszystkich moich scrollpanes:Niestandardowy projekt JScollPane Java Swing

enter image description here

z Java Swing. Używam Netbeans IDE. Jakie jest najprostsze rozwiązanie?

Dziękuję bardzo.

Pozdrowienia

+0

ja Nie rozumiem cię. scrollpane automatycznie wstawia pasek przewijania, gdy naruszony zostanie rozmiar elementu, który zawiera. – gprathour

Odpowiedz

16

Można dostosować wygląd komponentu swing ustawienie niestandardowego UI. W przypadku panelu przewijania na pasku przewijania, możesz zrobić

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

gdzie MyScrollBarUI pochodzi z javax.swing.plaf.basic.BasicScrollBarUI. Aby to zrobić dla wszystkich pasków przewijania (nie tylko w przypadkach JScrollPane), zadzwoń

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

przed utworzeniem jakichkolwiek komponentów Swing.

W MyScrollBarUI, przesłonić następujące metody:

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 
    } 
} 

paska przewijania jest graficznie bardzo prosta, więc nie powinno być zbyt trudne do wdrożenia.

+1

Świetna odpowiedź dziękuję bardzo –

+0

Pamiętaj, by zastąpić 'chronioną pustkę paintTrack (Grafika g, JComponent c, Rectangle trackBounds) 'i' paintThumb' (ta sama metoda podpisu) w [BasicScrollBarUI] (http://docs.oracle.com/javase/6/docs/api/javax/swing/plaf/ basic/BasicScrollBarUI.html) lub możesz nie widzieć niczego. – Nateowami

+0

Czy byłoby możliwe, aby nie kodować w sposób twardy 'extends BasicScrollBarUI', ale aby rozszerzyć klasę interfejsu użytkownika paska przewijania, która jest aktualnie używana? Jak 'extends scrollBar.getUI(). GetClass()'? – Bowi

1

1) nadpisywania JToolBar

2) większość Custom Look and Feel overrode że

+1

relacja paska narzędzi do paska przewijania jest taka ... ;-) Plus (w końcu jest poniedziałek rano): nadpisujesz metody, klasy są rozszerzone (lub zaimplementowane) – kleopatra

0

Nie zapominaj, że jeśli masz zamiar używać UIManager przesłonić wszystkie paski przewijania jak ten

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

wówczas klasy SimpleScrollBarUI koniecznością mieć metoda createUI, tj:

public class SimpleScrollBarUI extends BasicScrollBarUI { 

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

    //... 

}