Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe

Alex2013

Bekanntes Mitglied
Hallo Leute,

mein Problem ist, dass ich mal versuchen wollte, mit zwei JSlidern zu arbeiten.
Bei dem einen Slider kann man sein Gewicht einstellen und bei dem anderen Slider seine Größe.
anschließend kann man in einem Textfeld noch sein Geschlecht eingeben.
Wenn alles eingestellt und eingegeben wurde, soll auf dem Label darunter das Normalgewicht angezeigt werden. Das Programm zeigt keine Fehler an und ich wüsste jetzt auch nicht, wo ich einen Fehler gemacht habe bzw. wo ich suchen sollte.

Anfangs code:

Java:
[code]
@Override
	public void stateChanged(ChangeEvent ce) 
	{
			JSlider source;
			source=(JSlider)ce.getSource();
			String geschlecht=tf1.getText();
			if((ce.getSource().equals("Gewicht"))&&(ce.getSource().equals("Größe"))&&(geschlecht.equals("m")))
			{
				//gewicht=source.getValue();
				groesse=source.getValue();
				//groesse /= 100;
				gewicht=((groesse*groesse)/100)*0.25;
				l1.setText(""+gewicht);
			}
			else if((ce.getSource().equals("Gewicht"))&&(ce.getSource().equals("Größe"))&&(geschlecht.equals("w")))
			{
				//gewicht=source.getValue();
				groesse=source.getValue();
				//groesse /= 100;
				gewicht=((groesse*groesse)/100)*0.235;
				l1.setText(""+gewicht);
			}
		}
[/code]

und danach einmal mit einer kleinen Änderung:

Java:
[code]
@Override
	public void stateChanged(ChangeEvent ce) 
	{
			JSlider source;
			source=(JSlider)ce.getSource();
			String geschlecht=tf1.getText();
			if((ce.getSource().equals("Gewicht"))&&(ce.getSource().equals("Größe")))
			{
				if(geschlecht.equals("m"))
				{
					//gewicht=source.getValue();
					groesse=source.getValue();
					//groesse /= 100;
					gewicht=((groesse*groesse)/100)*0.25;
					l1.setText(""+gewicht);
				}
			}
			else if((ce.getSource().equals("Gewicht"))&&(ce.getSource().equals("Größe")))
			{
				if(geschlecht.equals("w"))
				{
					//gewicht=source.getValue();
					groesse=source.getValue();
					//groesse /= 100;
					gewicht=((groesse*groesse)/100)*0.235;
					l1.setText(""+gewicht);
				}
			}
		}
[/code]

Die aber leider nichts gebracht hat. Daher wollte ich euch einmal fragen, ob ihr wisst, wie ich hier vorgehen muss?
Oder ob so etwas grundsätzlich nicht geht.

Lg

PS: Ich habe es auch schon ohne ce.getSource() also nur mit equals versucht, was auch keine Besserung brachte... :-(
 
Zuletzt bearbeitet:
und was ist der Fehler?

was ist deine Frage?

gib dir bei den Änderungen doch einfach mal System.out.println() Ausgaben aus... oder geh mit dem debugger durch und schau, welche Werte wo sind, welche Werte bekommen deine Methoden übergeben? Welche sollten sie bekommen?
 
Zuletzt bearbeitet:
Meine Frage ist, warum auf dem label nichts angezeigt wird?
Denn soweit ich das sehe, sind die Bedingungen korrekt formuliert, oder irre ich da?
Also wenn slider1 und slider2 ausgewählt wurden und geschlecht eingegeben wurde
dann soll das textfeld mit einem wert belegt werden.
Ich gehe noch mal alles durch... hofftl. finde ich etwas.
Ansonsten wäre ich für einen Tipp dankbar. 🙂

Lg
 
ce.getSource().equals("Gewicht"))&&(ce.getSource().equals("Größe")

Schau dir diese Zeile mal genau an. Du verlangst von der Quelle des Change Events erstens dass sie ein String ist und zweitens dass sie zwei verschiedene Strings gleichzeitig ist. Das kann nicht funktionieren. Die Quelle ist ein JSlider und kein String.

Wenn dann musst du deinen Jslidern über setName einen Namen geben und den per getName abfragen um sie auseinanderzuhalten. Ausserdem musst du aus dem && ein || machen. Dann sollte es funkionieren.
 
Aber ich möchte ja, dass etwas angezeigt wird, nachdem beide Slider betätigt wurden und nicht nachdem der eine oder der andere betätigt wurde.
Ich wollte die werte der beiden sozusagen verknüpfen und die Eingabe des Textfeldes ebenfalls mit dessen ergebnis verknüpfen und anschließend als Ergebnis von beiden Operationen etwas ausgeben lassen. Nicht nur nach betätigen eines Sliders...
Wisst ihr evtl., wie ich das anstellen muss?

Lg
 
Ich habe es jetzt auf eine andere Art gelöst. Mit zwei SliderListener Klassen für beide Slider jeweils einen.
Das ist zwar nicht ganz das was ich wollte, aber die Funktionsweise ist im Grunde die Gleiche.

Lg
 

Zurück
Oben