Benutzerdefinierte JScrollBar

Asamandra

Mitglied
Hallo!

Vorab:
Falls die Frage schon mal gestellt wurde - Sorry ich habe nichts gefunden.
Google hab ich auch schon benutzt, aber jetzt reichts ^^

Mein Problem:
Ich möchte eine Scrollbar erstellen die eigene Grafiken benutzt.
Ich habe es auch schon geschafft die Pfeilchen auszutauschen (also Increase und DecreaseButton),
nur bei Track und Knob scheitere ich.
So weit ich Ideen dazu habe ist mein Eindruck dass um diese beiden zu verändern tiefergehende Eingriffe nötig sind als bei den Pfeilchen (da gings ja einfach mit überschreiben von createIncreaseButton()).
Farbe ändern ist auch drin nur eben anderes Aussehen (zB ein Kreis für den Knob und dünnere Linie für Track) schaff ich nicht.

Frage: Was wäre die einfachste Lösung dazu?

Danke schon mal ^^
 

sibianu

Mitglied
Hi, ich habe sowas als einen Extension von JSlider gemacht. Der Knob ist wenn ich das richtig gesehen habe in der LookAndFeel drin, da kommst du nicht so einfach dran, du kannst es aber übermalen. Um einen schönen Track, mit einem Verlauf oder andere Spinnereien musst du auch den Track übermalen. Du kommst also nicht an der Paint-Routine vorbei. Ich habe für meinen Slider Painter definiert, die ich dann für den Track und Hintergrund benutze. Den Knob (Slider) habe ich als einzelnes Objekt definiert als Area-Extension mit einer eigene paint-Routine. Diesen Objekt muss man nur noch an die richtige Position setzen und fertig. ;)
Das komplizierte dadran sind nur die Berechnungen für die Bewegung und das schöne Aussehen des Sliders. Da ich das für die Firma programmiert habe kann ich dir leider den Code nicht geben, aber wenn du Fragen hast kann ich sie dir evtl beantworten wenn ich das nächste Mal reinschaue.
 

Anhänge

  • slider.jpg
    slider.jpg
    5 KB · Aufrufe: 42

hemeroc

Bekanntes Mitglied
Hi,

Es könnte auch gehn indem man eine eigene ScrollbarUI schreibt und dabei von BasicScrollbarUI extendet.

Ein Beispiel dazu findet sich hier Java Programming [Archive] - custom scrollPane?

Btw.: der "Knob" scheint im src Thumb zu heißen. Sprich die zu überschreibende Methode wäre
Java:
protected void paintThumb(Graphics g,
                          JComponent c,
                          Rectangle thumbBounds)

LG Hemeroc
 

Asamandra

Mitglied
Uh vielen dank ^^ Ich dachte mir schon dass ich da etwas tiefergründiger rein muss. Fies sowas...
Ich versuch mich mal an dem das du vorschlägst klingt bzw sieht so aus wie das was ich will.
Daaaanke


Achja ^^ Mein allerliebster hemeroc mit dem Tutorial das du da verlinkst hab ich es schon probiert, bzw genau das ist es was ich bisher gemacht habe ^^ So einfach ist es leider nicht gewesen. Ich weiß zwar was die Komponenten sind an denen ich rupfuschen will aber bei knob und track wüsst ich einfach nicht wie ich sie auf diese Art überscheiben soll. Farbe ändern war kein Problem...
 
Zuletzt bearbeitet:

hemeroc

Bekanntes Mitglied
Knob und Track würdest du folgendermaßen überschreiben:

Java:
class MyScrollBarUI extends BasicScrollBarUI {
        
        @Override
        protected void paintThumb(final Graphics g, final JComponent c, final Rectangle thumbBounds) {
            if (thumbBounds.isEmpty() || !this.scrollbar.isEnabled()) {
                return;
            }
            
            final int w = thumbBounds.width;
            final int h = thumbBounds.height;
            
            g.translate(thumbBounds.x, thumbBounds.y);
            
            g.setColor(this.thumbDarkShadowColor);
            g.drawRect(0, 0, w - 1, h - 1);
            g.setColor(this.thumbColor);
            g.fillRect(0, 0, w - 1, h - 1);
            
            g.setColor(this.thumbHighlightColor);
            g.drawLine(1, 1, 1, h - 2);
            g.drawLine(2, 1, w - 3, 1);
            
            g.setColor(this.thumbLightShadowColor);
            g.drawLine(2, h - 2, w - 2, h - 2);
            g.drawLine(w - 2, 1, w - 2, h - 3);
            g.translate(-thumbBounds.x, -thumbBounds.y);
        }
        
        @Override
        protected void paintTrack(final Graphics g, final JComponent c, final Rectangle trackBounds) {
            g.setColor(this.trackColor);
            
            g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height);
            
            if (this.trackHighlight == BasicScrollBarUI.DECREASE_HIGHLIGHT) {
                this.paintDecreaseHighlight(g);
            } else if (this.trackHighlight == BasicScrollBarUI.INCREASE_HIGHLIGHT) {
                this.paintIncreaseHighlight(g);
            }
        }
    }

Das wäre jetzt der JavaStandard, ob und was du auf das Graphics object zeichnest ist eigentlich egal.
LG Hemeroc
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
I Swing JScrollBar AWT, Swing, JavaFX & SWT 2
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
R Swing JScrollBar mit JTextField koppeln AWT, Swing, JavaFX & SWT 3
P JScrollBar designen oder unsichtbar machen AWT, Swing, JavaFX & SWT 10
G Swing Value von einer JScrollBar auf eine andere übertragen AWT, Swing, JavaFX & SWT 2
T Swing JScrollBar fetter machen? AWT, Swing, JavaFX & SWT 2
H JScrollBar nicht verstellbar AWT, Swing, JavaFX & SWT 2
B Swing JScrollBar in einem JPanel mit FlowLayout AWT, Swing, JavaFX & SWT 15
A Swing JPanel in JScrollBar scrollbar machen AWT, Swing, JavaFX & SWT 4
D Swing JScrollbar ganz nach unten scrollen AWT, Swing, JavaFX & SWT 2
A JScrollBar durch Button ersetzten AWT, Swing, JavaFX & SWT 2
xehpuk Swing JScrollBar wird nicht eingeblendet, wenn JTable befüllt wird AWT, Swing, JavaFX & SWT 4
B Swing JScrollPane - observen wann eine JScrollBar angezeigt wird? AWT, Swing, JavaFX & SWT 5
V Position der JScrollBar ändern AWT, Swing, JavaFX & SWT 5
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
D Swing JScrollbar zentrieren AWT, Swing, JavaFX & SWT 3
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JScrollBar-Position festlegen.. AWT, Swing, JavaFX & SWT 3
R JScrollBar - Immer drei Zeilen weiter AWT, Swing, JavaFX & SWT 10
R JScrollBar mit eigenem look and feel AWT, Swing, JavaFX & SWT 6
C JScrollpane eigenen jScrollBar einfügen AWT, Swing, JavaFX & SWT 2
R JScrollBar / JScrollPane: Ermitteln ob ganz unten AWT, Swing, JavaFX & SWT 2
F JScrollbar Verschiebung des Viewport ermitteln AWT, Swing, JavaFX & SWT 3
M JScrollbar + JTable + Zeilen wie in Excel hinzufügen AWT, Swing, JavaFX & SWT 14
M JScrollbar + Adjustmentlistener + Button AWT, Swing, JavaFX & SWT 3
M Listener für Button auf JScrollbar AWT, Swing, JavaFX & SWT 10
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
J JScrollBar lässt sich nicht auf minimum setzten AWT, Swing, JavaFX & SWT 7
T JScrollbar UI verändern AWT, Swing, JavaFX & SWT 5
D Problem mit JScrollBar, AutoScroll und JTextArea AWT, Swing, JavaFX & SWT 2
B horizontale bzw. vertikale JScrollBar breite von JScrollPane AWT, Swing, JavaFX & SWT 5
loadbrain Mehrer Panesl: JScrollBar, JScrollPane? AWT, Swing, JavaFX & SWT 9
K JTextArea + JScrollBar AWT, Swing, JavaFX & SWT 11
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
V Farben setzen bei einigen Komponenten (JScrollBar, . AWT, Swing, JavaFX & SWT 3
P Breite eines JScrollbar vergrößern, aber wie? AWT, Swing, JavaFX & SWT 8
M JScrollbar bei einer JTable AWT, Swing, JavaFX & SWT 5
L JScrollBar AWT, Swing, JavaFX & SWT 3
B Problem mit der Kombination von JScrollBar und JTextArea AWT, Swing, JavaFX & SWT 2
S Anzeige-Wirrwar in JScrollbar AWT, Swing, JavaFX & SWT 3
B Listener entfernen bei JScrollbar AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben