JSlider

Revangelis

Mitglied
Servus.
Ich habe ein kleines Problem mit meinem JSlider. Ich will ein einfaches JSlider mit 5 Major Ticks (1/4, 1/2, 1, 2, 4) erzeugen. Hier ist meine Code:

Java:
	    final int MIN = 1/4;
	    final int MAX = 4;
	    final int INIT = 1;   
	       
	    JSlider Samplerate = new JSlider(JSlider.HORIZONTAL, MIN, MAX, INIT);; 
	    Samplerate.setMaximum(4); 
	    Samplerate.setMinimum(4/16); 

            Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
	    
	    labelTable.put( MAX/16, new JLabel("1/4") );
	    labelTable.put( MAX/8, new JLabel("1/2") );
	    labelTable.put( MAX/4, new JLabel("1") );
	    labelTable.put( MAX/2, new JLabel("2") );
	    labelTable.put( MAX, new JLabel("4") );
	    Samplerate.setLabelTable( labelTable );
	    Samplerate.setPaintLabels(true);
	    Samplerate.setMajorTickSpacing(MAX/4); 
	    Samplerate.setPaintTicks(true);

Aber meine Labels stimmen nicht. Ich bekomme so was:
|----|----|----|----|
1/2--1----2--------4

Kann jemand mir sagen, was ich falsch mache? Vielen Dank!
 

eRaaaa

Top Contributor
Du hast da einen kleinen Gedankenfehler!
Java:
 final int MIN = 1/4;

da du hier Integer hast, ist das natürlich schon 0 !
Und da put auch einen Integer erwartet, ist natürlich auch so etwas wie [c]MAX/16[/c] quatsch!
 

Revangelis

Mitglied
Danke für die schnelle Antwort aber ich hab nicht ganz kapiert was ich machen soll. Die Code habe ich so verändert aber ich bekomme Errors:


Java:
	    JSlider Samplerate = new JSlider(JSlider.HORIZONTAL); 
	    Samplerate.setMaximum(4); 
	    Samplerate.setMinimum(4/16); 

	    //Create the label table
	    Hashtable<Double, JLabel> labelTable = new Hashtable<Double, JLabel>();
	    
	    labelTable.put( 0.25, new JLabel("1/4") );
	    labelTable.put( 0.5, new JLabel("1/2") );
	    labelTable.put( 1.0, new JLabel("1") );
	    labelTable.put( 2.0, new JLabel("2") );
	    labelTable.put( 4.0, new JLabel("4") );
	    Samplerate.setLabelTable( labelTable );
	    Samplerate.setPaintLabels(true);
	    Samplerate.setMajorTickSpacing(1); 
	    Samplerate.setPaintTicks(true);
 

eRaaaa

Top Contributor
Ne ne, das geht so auch nicht, du musst weiterhin bei Integer bleiben und entsprechend umrechnen.
Wenn dein min also 0.25 sein soll, kannst du z.B. einfach sagen 0.25 --> 25 und dann den Wert entsprechend immer durch 100 teilen.
Irgendwie so z.B.:
Java:
		final int MIN = 25;
		final int MAX = 400;
		final int INIT = 100;
		JSlider samplerate = new JSlider(JSlider.HORIZONTAL, MIN, MAX, INIT);
		Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
		labelTable.put(MIN, new JLabel("<html>&frac14;</html>"));
		labelTable.put(MIN*2, new JLabel("<html>&frac12;</html>"));
		labelTable.put(INIT, new JLabel("1"));
		labelTable.put(INIT * 2, new JLabel("2"));
		labelTable.put(MAX, new JLabel("4"));
		samplerate.setLabelTable(labelTable);
		samplerate.setPaintLabels(true);
		samplerate.setMajorTickSpacing(25); 
		samplerate.setPaintTicks(true);

Und dann wenn du dir den Wert mit getValue() holst, eben wieder zurückrechnen :
Code:
samplerate.getValue()/100.;
 

Revangelis

Mitglied
es tut mir wahnsinnig leid wieder zu stören aber ich bin ein noob und hab es nicht geschafft. was soll ich genau in stateChanged schreiben? Bei mir schaut es momentan so:

Java:
	     final int MIN = 25;
	     final int MAX = 400;
	     final int INIT = 100;
	       
	    JSlider Samplerate = new JSlider(JSlider.HORIZONTAL, MIN, MAX, INIT);; 


	    //Create the label table
	    Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
	    
	    labelTable.put( MIN, new JLabel("<html>&frac14;</html>"));
	    labelTable.put( MIN*2, new JLabel("<html>&frac12;</html>"));
	    labelTable.put( INIT, new JLabel("1") );
	    labelTable.put( INIT*2, new JLabel("2") );
	    labelTable.put( MAX, new JLabel("4") );
	    Samplerate.setLabelTable( labelTable );
	    Samplerate.setPaintLabels(true);
	    Samplerate.setMajorTickSpacing(25); 
	    Samplerate.setPaintTicks(true);
	    
        Samplerate.addChangeListener(new javax.swing.event.ChangeListener() {
        	
    	public void stateChanged(ChangeEvent e) {
    		JSlider Samplerate = (JSlider) e.getSource();
    		MAX = Samplerate.getValue()/100.;

    	}
        });
 

eRaaaa

Top Contributor
a) MAX ist final, daher kannst du den Wert nicht neu zuweisen(ist ja auch okay so)
b) MAX ist ein int - Samplerate.getValue()/100. ist aber ein double !
c)
Java:
		Samplerate.addChangeListener(new javax.swing.event.ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				double value = ((JSlider) e.getSource()).getValue() / 100.;
				System.out.println(value);
			}
		});

d) Variablen fangen mit kleinem Anfangsbuchstaben an :bae:
 

Revangelis

Mitglied
danke eRaaaa!
aber noch was :).
so das erste bild ist wie es (vielen dank an dir) momentan ausschaut. aber die zweite ist wie es ausschauen soll. was kann ich dafür machen?

slideri.jpg
 

Michael...

Top Contributor
Das Problem ist, das Du keine lineare Skalierung haben willst, daher musst Du wohl ein bisschen rechnen:
Java:
	Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
	labelTable.put(-20, new JLabel("1/4"));
	labelTable.put(-10, new JLabel("1/2"));
	labelTable.put(0, new JLabel("1"));
	labelTable.put(10, new JLabel("2"));
	labelTable.put(20, new JLabel("4"));
	
	JSlider slider = new JSlider(JSlider.HORIZONTAL, -20, 20, 0);
	slider.setLabelTable(labelTable);
	slider.setMajorTickSpacing(10);
	slider.setMinorTickSpacing(1);
	slider.setPaintLabels(true);
	slider.setPaintTicks(true);

	slider.addChangeListener(new ChangeListener() {
		public void stateChanged(ChangeEvent e) {
			double value = Math.pow(2,	((JSlider) e.getSource()).getValue() / 10.0);
			System.out.println(value);
		}
	});
 
Ä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 Tickspacing in JSlider AWT, Swing, JavaFX & SWT 3
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
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


Oben