# JSlider Track Breite und Farbe



## Sejla (5. Jan 2010)

Hallo,

Ich habe eine einfache java MainApplication Klasse die eine Instanz von MainView Klasse erzeugt. Die MainView Klasse ist von JFrame abgeleitet und da verwende ich ein JSlider.

Ich bin gerade dabei einbisschen das Aussehen von dem Slider zu ändern. Ich möchte die Hintergrundfarbe von dem Track von dem Slider weiss haben und sonst den ganzen Slider transparent machen. Das thumb Icon setzen habe ich geschafft und das habe ich so gemacht.

Die Struktur von meiner Klassen schaut ungefärh so aus:


```
public class MainApplication {

    public MainApplication() {   
        MainView view = new MainView();
    }

    private static void initUI () {
        Resources resources = Resources.getInstance();
        Icon thumbIcon = resources.getIconSliderThumb();
 
        UIDefaults defaults = UIManager.getDefaults();
        defaults.put("Slider.verticalThumbIcon", thumbIcon);
        
        defaults.put("Slider.altTrackColor", Color.WHITE);
        defaults.put("Slider.trackWidth", 50);
       
    }

   public static void main(String[] args) {
 
       initUI();

       MainApplication gui = new MainApplication();
    }
}

public class MainView extends JFrame {
 ...

  private void createZoomRuler() {
        JSlider zoomRuler = new JSlider(JSlider.VERTICAL, 10, 16, 15);
        zoomRuler.setMajorTickSpacing(1);
        zoomRuler.setMinorTickSpacing(1);
        zoomRuler.setPaintLabels(true);
       // zoomRuler.setPaintTicks(true);
        zoomRuler.setPaintTrack(true);
        zoomRuler.setSnapToTicks(true);
  }

...

}
```

Ich habe es so versucht über Key-Value setzen bei UIDefaullts aber es scheint nicht zu funktionieren, ads einzige was geht ist das thumb icon, die wird richtig angezeigt. Die Hintegrundfarbe von dem Track ist weietr grau udn die breite ist sehr klein.

Ich habe folegndes link gefunden, wo selche key werte für swing komponneten definiert sind und JSlider ist auch dabei.

Link: Customizing a JSlider Look and Feel : JSlider : Swing : Java Tutorial

Hat jemand eine Idee wieso es nicht funktioniert oder was ahbe ich da falsch gemacht?

Danke!

lg
Sejla


----------



## Ebenius (7. Jan 2010)

Nur so am Rande: Was genau sollen denn die Zeilen 30 bis 38? Da wird eine lokale Variable [c]zoomRuler[/c] initialisiert, um sie einfach wieder zu vergessen...

Mach lieber mal ein KSKB und dazu eine Zeichnung (oder ganz genaue Erklärung) was sich genau wie ändern soll.

Ebenius


----------



## Sejla (8. Jan 2010)

Hallo Ebeneius,

Die lokale variable zoomRuler gehört selbstverständlich nicht da, sie ist eine private variable von der MainView Klasse, ich habe es im forum so manuel geschrieben. Den Rest der Code in der MainApplication Klasse ist so wie im Code.

Es geht also um darum, dass der Slider nicht so gut ausschaut. Ein einfaches Slider mit dem Track in silber farbe und einem auch so einfachem Thumb zum schieben. Das ist das Standard Look im Swing, also Metal Look. Ich möchte nicht den ganzen Skin ändern sondern nur an manchen Komponenten das zu ändern was mir so nicht gefällt.

Ich habe mir vorgestellt etwas wie den Slider im Google Maps zu haben, also zumindest den Track in weisser Farbe und dass ich da die Breite von dem Track auch selbst anpassen kann. Und den Thumb zum schieben dass ich da eigenes Icon verwenden kann.

Wie gesagt, das mit dem Thumb habe ich geschafft, also mein eigenes icon zu setzem auf dem thumb anstelle von swing default thum. Meine eigene Klasse Resources liefert mir den Icon.

Das habe ich mit diesen Zeilen geschafft:
UIManager.getDefaults();
        defaults.put("Slider.verticalThumbIcon", thumbIcon);

Die Breite von dem Track sollte man auch irgendwie auf dieselbe weise einstellen können. Da habe ich mir gedacht den Key "Slider.trackWidth" zu verwenden, weil das steht in der tabelle auf dem link die ich im vorherigen beitrag gepostet habe. Das hat aber nicht funktioniert, hat sich nichts auf dem aussehen geändert.

Ich hoffe dass es jetzt zumindets klar ist, was ich erreichen will?

Ich habe nicht viel Erfahrung damit wie die Swing Komponenten im Hintergrund implementiert sind und die ganze komplexe Sachen die man auf den ersten Blick auch nicht erkennt. Ich möchte nicht damit sehr viel Zeit verbringen wie ich eigene JSlider Komponente erzeuge, weil ich mich, wie gesagt, mit den ganzen komplexen Sachen nicht ganz auskenne und ich auch unter dem zeitdruck stehe.

Falls jemand eine Idee hat wie ads möglich wäre, wäre ich sehr dankabr.

liebe Grüsse
Sejla


----------

