# JScrollbar UI verändern



## _tiGGa_ (18. Mai 2007)

hallo,

ich möchte gern für mein projekt die gui der scrollbar ändern, 
also die eigentliche scrollbar, buttons, shadow und und und verändern 

nun hab ich gelesen, das man die einzelnen eigenschaften mit dem UI.Manager ändern kann.

nun ändert dies aber nicht die eigentliche gui.
wie kann ich diese ändern?

ich hoffe ihr könnt mir helfen.

danke im voraus
tigga

EDIT:

ok, hab es nun doch geschaft 

aber wie kommt man an die Button in einer Scrollbar ran?
möchte da gerne noch die Paintmethode überschreiben


----------



## André Uhres (18. Mai 2007)

```
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {...}
```


----------



## _tiGGa_ (18. Mai 2007)

hallo,

paintThumb ist ja nur für die eigentliche Srollbar, also der Balken,
den ich bewegen kann.
Diesen hab ich ja schon verändert.

Mir ist nur noch nicht ganz klarm, wie ich die Paintmethode der buttons überschreiben kann.

mfg
tigga


----------



## kleiner_held (18. Mai 2007)

Dafuer musst du wohl die UIKlasse ueberschreiben und am JScrollbar deine UIKlasse installieren.
BasicScrollBarUI hat die Methoden createDecreaseButton() und createIncreaseButton(), diese Methoden muesstest du ueberschrieben und darin deine eigene Implementierung von BasicArrowButton erzeugen (oder gleich einen eigenen JButton).
Je nach verwendetem L&F solltest du nicht direkt die BasicXYZ Klassen ueberschreiben sondern sondern z.B. MetalScrollBarUI und MetalScrollButton.

Also viel Arbeit und neue Probleme, wenn du das L&F austauschbar machst - meiner Meinung nach lohnt sich das nicht (kommt natuerlich drauf an was Du genau erreichen willst).


----------



## André Uhres (18. Mai 2007)

```
package gui;
/*
* ScrollKnobDemo.java
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.metal.*;
public class ScrollKnobDemo extends JFrame {
    private JScrollPane jScrollPane1;
    private JTextArea jTextArea1;
    public ScrollKnobDemo() {
        super("Scroll Knob Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(300, 300);
        setLocationRelativeTo(null);
        jScrollPane1 = new JScrollPane();
        jTextArea1 = new JTextArea();
        jTextArea1.setText("test test test test test test test test test test " +
                "test test test test test test test test test test test \ntest " +
                "\ntest \ntest \ntest \ntest \ntest \ntest \ntest \ntest \ntest " +
                "\ntest \ntest \ntest \ntest \ntest \ntest \ntest \ntest \ntest \ntest \n");
        jScrollPane1.setViewportView(jTextArea1);
        getContentPane().add(jScrollPane1, BorderLayout.CENTER);
        jScrollPane1.getVerticalScrollBar().setUI(new CustomScrollBarUI());
        jScrollPane1.getHorizontalScrollBar().setUI(new CustomScrollBarUI());
    }
    public static void main(final String args[]) {new ScrollKnobDemo().setVisible(true);}
}
class CustomScrollBarUI extends MetalScrollBarUI {
    protected void paintThumb(final Graphics g, final JComponent c, final Rectangle thumbBounds) {
        Graphics2D g2 = (Graphics2D)g;
        int x = thumbBounds.x +1;
        int y = thumbBounds.y +1;
        int w = thumbBounds.width -2;
        int h = thumbBounds.height -2;
        g.setColor(Color.GREEN);
        g.fillRect(x+1,y+1,w,h);
        g.setColor(Color.YELLOW);
        g.drawRect(x,y,w,h);
        g2.setStroke(new BasicStroke(4f));
        if (scrollbar.getOrientation() == JScrollBar.VERTICAL){
            g.drawLine(x,y+h/2,x+w,y+h/2);
        }else{
            g.drawLine(x+w/2,y,x+w/2,y+h);
        }
        incrButton.setBackground(Color.YELLOW);
        decrButton.setBackground(Color.YELLOW);
        incrButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        decrButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    }
}
```


----------



## _tiGGa_ (18. Mai 2007)

hallo, ich dank euch.

zu kleiner held:
naja, ich "bastel" mir so selber n LnF nach dem aerith-layout zusammen.
dieses wird dann nicht mehr geändert, bzw. man kann dann im programm selbst nicht mehr das LnF ändern.
aber mal schaun ob es so klappt.

zu André Uhres:
danke dir, doch das hab ich schon so gemacht, wie in deiner beispielklasse,
doch ich möchte gerne die paintmthode der buttons überschreiben.

jetzt hab ich die buttons mal ganz weg gemacht, und finde,
sieht ganz jut aus


----------

