# JSlider umdrehen



## alias_host (2. Mai 2007)

bein problem ist ansich schon im titel beschrieben. ich möchte ganz einfach, dass der pfeil nicht nach unten, sondern nach oben zeigt.

weiß jemand von euch eine lösung???

Mfg alias_host


----------



## JPKI (2. Mai 2007)

```
slider.setOrientation(JSlider.VERTICAL);
```


----------



## merlin2 (3. Mai 2007)

Das ist doch nicht das, was er wollte, oder?

_______^________

Ich dachte, dieses Aussehen sei gewünscht!


----------



## Gast (3. Mai 2007)

schau mal im metalslider ui. glaub dort gabs ne methode die paintthumb heisst. die einfach umschreiben.


----------



## Marco13 (3. Mai 2007)

Standardmäßig geht das erstmal nicht. (Die Frage "Wozu auch?" verkneife ich mir mal). Man kann das Look&Fell umschreiben, so dass es geht. Kann aber kompliziert sein. FALLS der Slider keine Beschriftung hat, wäre vmtl. die einfachste brute-force Lösung, den http://weblogs.java.net/blog/alexfromsun/archive/2006/07/jxtransformer_t.html zu verwenden, und den Slider einfach zu spiegeln. Aber ... naja....


----------



## alias_host (3. Mai 2007)

danke!!! ich hatte an so was wie das beispiel von merlin2 gedacht. ich glaube ich spiegel ihn einfach


----------



## Gast (4. Mai 2007)

den slider umdrehen, wenn du nur das icon für den knob umdrehen willst?
wtf??
machs wie ich gesagt habe

public class newSliderUI extends MetalSliderUI ...

und dort die public void paintThumb(Graphics g) überschreiben. wenn du den einfach umdrehen willst, dann kannste da einfach schnell den code "drehen".


----------



## alias_host (4. Mai 2007)

also ich habe bis jetzt noch nie so was gemacht, aber ich habe schon mal folgendes vorbereitet:


```
import java.awt.Graphics;
import java.awt.Rectangle;

import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalSliderUI;


public class newSliderUI extends MetalSliderUI{
    protected static Icon extraThumbIcon;
	
	public void installUI( JComponent c ) {
    trackWidth = ((Integer)UIManager.get( "Slider.trackWidth" )).intValue();
    tickLength = ((Integer)UIManager.get( "Slider.majorTickLength" )).intValue();
    horizThumbIcon = UIManager.getIcon( "Slider.horizontalThumbIcon" );
    vertThumbIcon = UIManager.getIcon( "Slider.verticalThumbIcon" );
    extraThumbIcon = ??????

super.installUI( c );

    thumbColor = UIManager.getColor("Slider.thumb");
    highlightColor = UIManager.getColor("Slider.highlight");
    darkShadowColor = UIManager.getColor("Slider.darkShadow");

    scrollListener.setScrollByBlock( false );

    Object sliderFillProp = c.getClientProperty( SLIDER_FILL );
    if ( sliderFillProp != null ) {
        filledSlider = ((Boolean)sliderFillProp).booleanValue();
    }
}
	
	public void paintThumb(Graphics g){
        Rectangle knobBounds = thumbRect;

        g.translate( knobBounds.x, knobBounds.y );

        if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
            extraThumbIcon.paintIcon( slider, g, 0, 0 );
        }


        g.translate( -knobBounds.x, -knobBounds.y );
    }

}
```

jezt muss ich das icon ja nur noch spiegeln oder??? kann mir dabei jemand helfen, und ist das so richtig???


----------



## merlin2 (4. Mai 2007)

Klassennamen schreibt man groß!
Ich sehs mir mal an...


----------



## merlin2 (4. Mai 2007)

Würde es nicht reichen, das Graphics(in diesem Fall -2D-)-Objekt zu drehen?


----------



## alias_host (6. Mai 2007)

und wie mache ich das genau???

also die Methode sieht ursprünglich so aus:

```
public void paintThumb(Graphics g)  {
        Rectangle knobBounds = thumbRect;

        g.translate( knobBounds.x, knobBounds.y );

        if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
            horizThumbIcon.paintIcon( slider, g, 0, 0 );
        }
        else {
            vertThumbIcon.paintIcon( slider, g, 0, 0 );
        }

        g.translate( -knobBounds.x, -knobBounds.y );
    }
```

und wie binde ich das dann in mein Programm ein???


----------



## merlin2 (6. Mai 2007)

Du legst ein Graphics2D-Objekt an:

```
Graphics2D g2d = (Graphics2D) g;
```
Dann drehst du es:

```
g2d.rotate(Math.toRadians(180));
```
Und zeichnest das Icon.


----------



## alias_host (6. Mai 2007)

wie kann ich nun eine Klasse JSlider erstellen, sodass die Klasse NewSliderUI verwendet wird???


----------



## alias_host (6. Mai 2007)

also ich habe jetzt die klasse NewMetalSlider erstellt:


```
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalSliderUI;


public class NewSliderUI extends MetalSliderUI{
	
	public void paintThumb(Graphics g){
		Graphics2D g2d = (Graphics2D) g;
		g2d.rotate(Math.toRadians(180));
		g = (Graphics) g2d;

        Rectangle knobBounds = thumbRect;

        g.translate( knobBounds.x, knobBounds.y );

        if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
            horizThumbIcon.paintIcon( slider, g, 0, 0 );
        }
        else {
            vertThumbIcon.paintIcon( slider, g, 0, 0 );
        }

        g.translate( -knobBounds.x, -knobBounds.y );
        
	}
    
        

}
```

nun weiß ich nicht weiter, wie binde ich diese jetzt in meinen code ein??? bzw wie erstelle ich einen JSlider, der die umgeschriebene klasse benutzt???


----------



## alias_host (7. Mai 2007)

hi kann mir niemand helfen???


----------



## Gast (7. Mai 2007)

also den kram speicherste unter NewSliderUI.java

und beim slider machste slider.setUI(new NewSliderUI())


----------

