Swing Tickspacing in JSlider

cyclohexan

Mitglied
Hallo,

ich baue einen JSlider, dessen Werte von -127 bis +127 gehen.
Als MajorTickSpacing habe ich 10 gewählt, Minor ist 5.
Mein Start- und Defaultwert für den Slider ist 0, und genau dort hätte ich gerne einen MajorTick.
Allerdings fängt der Slider natürlich bei seinem Minimum an, den ersten MajorTick zu malen, hier also -127.
D.h. bei -7 und +3 ist jeweils auch ein MajorTick, nicht aber bei 0.

Wie bekomme ich die Skala so verschoben, dass ich einen MajorTick bei 0 habe?
 

hdi

Top Contributor
Hm, ich hab mich damit grad etwas beschäftigt. Naja, etwas ist gut, knapp 3 Stunden :autsch: Wehe du liest den Thread hier gar nicht mehr :D

Ich hab mich durch den Source Code von JSlider gewühlt, und versucht ein paar Methoden zu overriden usw. Meine Idee war es erst einen JSlider von -125 bis +125/+127 zu erstellen (da dort ein Major Tick bei 0 wäre), dann dessen SliderUI abzuziehen, um den dann deinem eigentlichen Slider, der von -127 bis +127 geht, aufzudrücken. Hat teilweise geklappt, aber nicht richtig. Es ist einfach nicht vorgesehen dass man das ändert, und zuviele wichtige Klassen die da ne Rolle spielen sind innere oder lokale Klassen in JSlider.

Ich hab aber durchaus nen Vorschlag für dich:

Java:
final JSlider s = new JSlider(-130, 127, 0){
	@Override
	public void setValue(int n) {
		super.setValue(Math.max(n, -127));
	}
};
s.setMajorTickSpacing(10);
s.setMinorTickSpacing(5);

Damit hast du nen Slider der bei 0 einen Major Tick hat, und du kannst ihn auch nur im Bereich -127 bis +127 bewegen bzw einstellen. Problem ist nur, dass getMinimum() natürlich weiterhin -130 liefert, also da musst du dann aufpassen, wenn du den Wert programmatisch abfragst.

Wenn du die Labels anzeigen willst solltest du auch da Anpassungen vornehmen, damit da nix von -130 steht. Siehe Methode
Code:
setLabelTable()
.

Ist wie gesagt nur ein Workaround, aber ich hab echt ewig rumgespielt grad und was besseres hab ich nicht zu Stande bekommen. Wenn dir das nicht reicht kommst du wohl nicht dran vorbei dir eine ganz eigene Komponente zu erstellen. Muss ja nicht der gesamte Slider sein, es würde ja reichen eine eigene Track-Komponente (mit Ticks und Labels) zu erstellen.
 

xehpuk

Top Contributor
Ich würde meinen, man müsse "nur" [JAPI]javax.swing.plaf.basic.BasicSliderUI#paintTicks(java.awt.Graphics)[/JAPI] überschreiben und die UI gescheit im JSlider unterbringen. Eventuell die L&F-spezifischen UIs (MetalSliderUI, WindowsSliderUI etc.) jeweils extendieren.
Habe das jetzt nicht getestet, scheint mir aber logisch. (Na, ob das was heißen mag? :D)
 

cyclohexan

Mitglied
@hdi: Danke, funktioniert tadellos.
getMinimum brauche ich in meinem Fall nicht.
Es wundert mich nur ein Wenig, dass JSlider nicht einfach eine Methode für sowas bereitstellt, aber das ist dann eben so.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
D Swing JSlider Tip Anzahl AWT, Swing, JavaFX & SWT 3
J JSlider sichtbar AWT, Swing, JavaFX & SWT 7
J Swing JSlider - Form des Reglers AWT, Swing, JavaFX & SWT 6
J JSlider Color Ticks AWT, Swing, JavaFX & SWT 1
J JSlider - MajorTick AWT, Swing, JavaFX & SWT 0
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
A Slider (JSlider?) AWT, Swing, JavaFX & SWT 7
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
A Swing JSlider erscheint doppelt AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
M JSlider-Wert ändern, ohne ein ChangeEvent auszulösen AWT, Swing, JavaFX & SWT 4
C Aussehen von JSlider ändern AWT, Swing, JavaFX & SWT 7
D Swing jSlider soll selber weiterwandern, je nach zeit der musik AWT, Swing, JavaFX & SWT 5
D JSlider und Textfeld AWT, Swing, JavaFX & SWT 2
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
Y JSlider Wert auslesen (Kategorien) AWT, Swing, JavaFX & SWT 2
T jSlider-Value als Float in jLabel ausgeben AWT, Swing, JavaFX & SWT 2
O Swing JSlider mit doppelter Value AWT, Swing, JavaFX & SWT 6
F JSlider Design ändern AWT, Swing, JavaFX & SWT 6
D Swing JSlider AWT, Swing, JavaFX & SWT 11
B JSlider - Wert am Mouszeiger anzeigen lassen AWT, Swing, JavaFX & SWT 6
E JSlider synchron halten AWT, Swing, JavaFX & SWT 4
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
X Audio Player: Fenster mit Play/Stop-Button erstellen, mit JSlider Lautstärke ändern AWT, Swing, JavaFX & SWT 6
R JSlider AWT, Swing, JavaFX & SWT 9
M Swing JSlider, Popup-Box AWT, Swing, JavaFX & SWT 3
J JSlider mit Double Werten AWT, Swing, JavaFX & SWT 5
J JSlider auf JTextPane? AWT, Swing, JavaFX & SWT 2
M Jslider Beschriftung AWT, Swing, JavaFX & SWT 6
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
E jSlider und ChangeListener AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
T Swing JSlider und Adjustment-Listener wollen nicht so recht AWT, Swing, JavaFX & SWT 2
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
T JSlider: ChangeListener löst dreimal aus? AWT, Swing, JavaFX & SWT 4
B JSlider in JCombobox AWT, Swing, JavaFX & SWT 9
J JSlider wird nicht neugezeichnet AWT, Swing, JavaFX & SWT 8
J Einen JSlider ähnlich wie in OO3 AWT, Swing, JavaFX & SWT 5
G JSlider in Applet AWT, Swing, JavaFX & SWT 4
K Unterschiedliches Aussehen der JSlider? AWT, Swing, JavaFX & SWT 4
I Listener für einen JSlider AWT, Swing, JavaFX & SWT 1
G beschriftung von JSlider AWT, Swing, JavaFX & SWT 7
H JSlider mit 2 Werten AWT, Swing, JavaFX & SWT 7
L JSlider Beschriftung AWT, Swing, JavaFX & SWT 1
A JSlider umdrehen AWT, Swing, JavaFX & SWT 15
D JSlider und JMF player verbinden AWT, Swing, JavaFX & SWT 6
J JSlider regaiert unter Java 1.6 nicht mehr AWT, Swing, JavaFX & SWT 7
N JSlider: Kosmetik - snapToTicks AWT, Swing, JavaFX & SWT 3
T JComponents abändern/modifizieren z.b. JSlider AWT, Swing, JavaFX & SWT 2
N Nicht linearer JSlider! AWT, Swing, JavaFX & SWT 4
T JSlider getValue() erst nach dem Loslassen des Mauszeigers AWT, Swing, JavaFX & SWT 3
Z JSlider-Knob wenden AWT, Swing, JavaFX & SWT 8
L JSlider stumm geworden? AWT, Swing, JavaFX & SWT 2
I JSlider - klick ignorieren AWT, Swing, JavaFX & SWT 4
I JSlider-Schieberegler AWT, Swing, JavaFX & SWT 7
T JSlider Schiebereglerbild ändern AWT, Swing, JavaFX & SWT 4
U JSlider - Probleme bei der Darstellung AWT, Swing, JavaFX & SWT 3
H ChangeListener für JSlider AWT, Swing, JavaFX & SWT 6
P JSlider automatisch bewegen AWT, Swing, JavaFX & SWT 3
G JSlider AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben