Swing zwei JComboBoxen miteinander vergleichen und anschließend Button umwandeln

Alex2013

Bekanntes Mitglied
Hallo Leute,

ich habe ein Programm bei dem ich in der einen ComboBox Geschwindigkeitseinheiten habe welche ich auswählen kann. In einer zweiten ComboBox sind ebenfalls Geschwindigkeitseinheiten definiert.
Jetzt möchte ich jeweils eine Geschwindigkeit eingeben und die dazugehörende Einheit selbst wählen, anschließend mit der zweiten ComboBox eine andere Einheit auswählen und schließlich den Button umwandeln drücken.
Kann mir jemand sagen, wie genau ich vorgehen muss um die beiden comboboxen miteinander zu vergleichen und anschließend korrekt die umwandlung durchführen zu lassen?

Hier mein Ansatz:

Java:
[code]
private boolean comboboxCompareItems(JComboBox cb1)
	{
		for (int i=0; i < cb1.getItemCount(); i++)
		{
			if (cb1.getItemAt(i)!=cb2)
			{
				return true;
			}
		}
		return false;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if(e.getActionCommand().equals("umwandeln"))
		{
			cb1.setSelectedIndex(comboboxCompareItems(cb1));
		}
	}
[/code]

Kann man den Vergleich auf die Weise, so wie oben beschrieben angehen oder nicht?
Ich kann auch gerne noch den kompletten Code posten.

Für Antworten wäre ich dankbar 🙂

Lg
 
Ich nehme an dass du mit "comboboxCompareItems()" überprüfen willst, ob in beiden ComboBoxen unterschiedliche Einträge ausgewählt sind.
Du überprüfst aber jedes Item in cb1 und vergleichst es mit cb2 (die zweite ComboBox?). Der Sinn erschliesst sich mit nicht ganz.
Um zu checken, ob unterschiedliche Einträge ausgewählt sind musst du einfach nur "getSelectedItem()" bei beiden ComboBoxen aufrufen und per equals vergleichen.

In der "actionPerformed()" Methode versuchst du das boolean Ergebnis aus deinem Vergleich per "setSelectedIndex()" zu setzen. Das kann nicht funktionierenm, da "setSelectedIndex()" ein int erwartet.
Auch brauchst du doch die Auswahl der ComboBox nicht programmatisch zu setzen. Du willst doch, dass der Benutzer beide ComboBoxen auswählt, oder?


Ich würde das selectedItem der beiden ComboBoxen abfragen:
Wenn cb1 gleich km/h und cb2 gleich mp/h dann Methode convertKmhToMph() ausführen.
Wenn cb1 gleich mp/h und cb2 gleich km/h dann Methode convertMphToKmh() ausführen.
 
Hey,
ich konnte den letzten Tag leider nicht mit Java arbeiten, da ich selbst nach 5min. am PC schon Kopfschmerzen bekam. Aber zurück zum Thema.

Ich habe es jetzt denke ich einmal so probiert, wie du es vorgeschlagen hast. Der Compiler zeigt mir beim Debuggen auch keine Fehler an. Allerdings, gibt er mir das Ergebnis, welches ich vorne als Zahl eintrage auch nicht hinten am letzten Label aus.
Woran kann das liegen?
Ich habe mit dem umwandeln der Werte etc. auch bei einem anderen Projekt genauso gearbeitet, dort bekomme ich Werte ausgegeben... :-(
Hast du hier evtl. einen Tipp?

Hier der glaube ich relevante Code:

Java:
[code]
static double kmhInMph(double zahl)
	{	//das Ergebnis wird der variablen zahl19 zugewiesen und gerundet und anschliessend wird das Ergebnis ueber den Rueckgabewert mit der die zahl19 zurueckgegeben wird, 
		//auf dem Bildschirm ausgegeben
		double zahl2;
		zahl2=Math.round(zahl*0.62)*100/100.;
		return zahl2;
	}
	
	static double mphInKmh(double zahl)
	{
		double zahl2;
		zahl2=Math.round(zahl/0.62)*100/100.;
		return zahl2;
	}	
	
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		double zahl=0;

		if(e.getActionCommand().equals("umwandeln"))
		{
			if(cb1.getSelectedItem().equals(cb2.getSelectedItem()))
			{
				if((cb1.getSelectedItem()=="Km/h")&&(cb2.getSelectedItem()=="Mph"))
				{
					zahl=Double.parseDouble(tf1.getText());
				
					l2.setText(""+kmhInMph(zahl));
				}
			}	else if((cb1.getSelectedItem()=="Mph")&&(cb2.getSelectedItem()=="Km/h"))
				{
					zahl=Double.parseDouble(tf1.getText());
					
					l2.setText(""+mphInKmh(zahl));
			}
		}
	}
[/code]

Ich wäre dir echt dankbar, wenn du hier einen Tipp hättest 🙂

Lg
 
So sollte es gehen. Natürlich nur wenn die ComboBoxen Strings enthalten.

Java:
if(e.getActionCommand().equals("umwandeln"))
{
    if(cb1.getSelectedItem().equals(cb2.getSelectedItem()))
    {
        //Hier gibt es doch nichts umzuwandeln...
    }
    else if((cb1.getSelectedItem().equals("Km/h"))&&(cb2.getSelectedItem().equals("Mph")))
    {
        zahl=Double.parseDouble(tf1.getText());
           
        l2.setText(""+kmhInMph(zahl));
    }
    else if((cb1.getSelectedItem().equals("Mph"))&&(cb2.getSelectedItem().equals("Km/h")))
    {
            zahl=Double.parseDouble(tf1.getText());
                   
            l2.setText(""+mphInKmh(zahl));
    }
}

Ich sehe gerade etwas anderes. Vermutlich wolltest du mit der ersten if Abfrage sicherstellen, dass die ComboBoxen unterschiedliche Werte haben. Dann musst du den NICHT-Zusatz (Keine Ahnung wie der genau heisst) verwenden. Das "!".
Darum vermute ich dein Fehler liegt in der fehlerhaften Platzierung der letzten "else if" Anweisung:

Java:
public void actionPerformed(ActionEvent e)
{
    double zahl=0;
 
    if(e.getActionCommand().equals("umwandeln"))
    {
        if(!cb1.getSelectedItem().equals(cb2.getSelectedItem()))
        {
            if((cb1.getSelectedItem().equals("Km/h"))&&(cb2.getSelectedItem().equals("Mph")))
            {
                zahl=Double.parseDouble(tf1.getText());
               
                l2.setText(""+kmhInMph(zahl));
            }
            else if((cb1.getSelectedItem().equals("Mph"))&&(cb2.getSelectedItem().equals("Km/h")))
            {
                zahl=Double.parseDouble(tf1.getText());
                       
                l2.setText(""+mphInKmh(zahl));
            }
        }
    }
}
 
Zuletzt bearbeitet:
Ich habe es jetzt einmal genauso übernommen, wie du es gepostet hast. Aber es funktioniert bei mir noch immer nicht... :-(

Wüsstest du evtl. woran es noch liegen könnte oder ob man überhaupt zwei ComboBoxen miteinander vergleichn kann? was ja eigtl. gehen sollte.
Ich habe jetzt schon einige kleinere Varianten probiert, aber es klappt bei mir einfach nicht.
Also das JLabel l2 gibt keinen Text aus.

Es wäre super, wenn du noch weitere Möglichkeiten siehst, woran es liegen könnte, wenn du mir die dann mitteilen könntest, damit ich das Programm dann korrigieren kann. 🙂 Ich weiß leider nicht mehr weiter...

Lg
 
Naja, es wird etwas an der Oberfläche geändert (der Text der Label). Evtl ist es ein repaint Problem. Vielleicht hilft ein repaint() von deinem Fenster Objekt weiter.
Dazu muss ich sagen, dass Swing und repaint/aktualisieren von Oberflächen noch nie wirklich meine Stärke war.
 
Mhm... habe es gerade ausprobiert. Das hat leider auch nichts gebracht... :-(
Hast du vielleicht noch einen anderen Tipp oder wie würdest du denn vorgehen um dieses Programm zu schreiben?
vielleicht bin ich ja falsch vorgegangen...
Oder würdest du es nur etwas anders schreiben?

Lg
 
Es lag blos an einem kleinen Rechtschreibfehler, dass es nicht funktionierte... :-(

Jetzt klappt es 🙂

Vielen Dank trotzdem für deine Hilfe und deine Vorschläge.

Lg
 

Zurück
Oben