# Dropdown Button in einer GUI (Java Swing)



## Vampire (2. Mrz 2012)

Hallo zusammen,

ich habe folgendes Problem: In der GUI (JAVA Swing) meines Programmes möchte ich ein dropdown button hinzufügen, der den Wesenswert in der Fachklasse (Die Klasse DVBerechnung soll hier meine Fachklasse darstellen.) auf 1.1, 1.0, oder 0.9 setzt.


```
public class DVBerechnung
{
        private double wesen;

	//Konstruktor
	public DVBerechnung()
	{}
	
        public void setWesen(double pWesen)
	{
		wesen=pWesen;
	}
	
	public double getWesen()
	{
		return wesen;
	}
}
```

Also ich möchte, dass man im dropdown button "=","+" und "-" anklicken kann. Am besten wäre es, wenn "=" standardmaßig eingestellt wäre.

DVBerechnung test1 = new DVBerechnung;

=,  entspricht test1.setWesen(1.0);
+,  entspricht test1.setWesen(1.1);
-,  entspricht test1.setWesen(0.9);

Den Button habe ich schon in der GUI integriert, ich weiß leider nur nicht genau, wie ich es mit dem code umstehen muss. 

Habe auch schon hier nachgesehen JComboBox (Java 2 Platform SE 5.0), nur leider ist mein englisch nicht das beste.


```
public class Hauptfenster();
{
private JComboBox getDropdownWesenVert()
	{
		if (dropdownWesenVert == null)
		{
			dropdownWesenVert = new JComboBox();
			dropdownWesenVert.setBounds(new Rectangle(340, 150, 55, 31));
		}
		return dropdownWesenVert;
	}

}
```

Hier das Beispiel, wie ich es versucht habe umzusetzten:

Habe es von einem Beispiel aus dem Internet versucht abzuändern.

Nur leider hat das nicht wirklich geklappt.


```
private JComboBox getDropdownWesenAng()
	{
		if (dropdownWesenAng == null)
		{
			dropdownWesenAng = new JComboBox();
			dropdownWesenAng.setBounds(new Rectangle(340, 110, 55, 31));
			dropdownWesenAng.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					/*Dropdown Ang
					Vector<String> mWesen=new Vector<String>();
					mWesen.add("=");
					mWesen.add("+");
					mWesen.add("-");
					DefaultComboBoxModel model1=new DefaultComboBoxModel(mWesen);
					dropdownWesenAng.setModel(model1);
					*/
				}
			});
		}
		return dropdownWesenAng;
	}
```

Vielen Danke für Eure Hilfe

Lg Vampire


----------



## XHelp (2. Mrz 2012)

Du könntest das mit eigenen Datentypen machen:

```
class WesenVertIstEinUnguestigerName {
  private String displayValue;
  private double wesen;
  public WesenVertIstEinUnguestigerName(String displayValue, double wesen) {
    this.displayValue = displayValue;
    this.wesen = wesen;
  }
  //+getter
}
```
Und dann kannst du einfach 3 Objekte davon (
	
	
	
	





```
new Wesen...("=",1.0)
```
) in dein Model packen.


----------



## HimBromBeere (2. Mrz 2012)

Ich denke mal, das hier könnte dir helfen: http://www.java-forum.org/allgemeine-java-themen/121968-frage-jcombobox-gridlayout.html. Da ist zumindest erstmal beschrieben, wie du das selektierte Objekt herausbekommst. Auf Grundlage dieser Information machst du dann weiter.


----------



## Vampire (2. Mrz 2012)

Ok, mit der Methode JComboBox.getSelectedItem() würde es mir den angeklicken Wert, also +, =, oder - zurückgeben, den Wert könnte ich dann mit if()else abprüfen, wenn ich ihn in einer variablen auffange.

Aber ich weiß leider noch nicht wie ich die Werte überhaupt in den dropdown butten bekomme?

lg vampire


----------



## HimBromBeere (2. Mrz 2012)

Na mit JComboBox#addItem(Object o)
am Bsp.:

```
combo.addItem("+");
combo.addItem("=");
combo.addItem("-");
```
(Im Übrigen nicht in der ActionPerformed, sondern viel weiter oben)


----------



## Vampire (2. Mrz 2012)

Vielen Dank für die tolle Hilfe.

Ich habe es jetzt so umgesetzt:


```
private JComboBox getDropdownWesenVert()
	{
		if (dropdownWesenVert == null)
		{
			dropdownWesenVert = new JComboBox();
			dropdownWesenVert.setBounds(new Rectangle(340, 150, 55, 31));
			dropdownWesenVert.addItem("+");
			dropdownWesenVert.addItem("=");
			dropdownWesenVert.addItem("-");
		}
		
		return dropdownWesenVert;
	}
```

Das hier wäre dann der Button zum Berechnen

```
String mSelect = (String) (dropdownWesenVert.getSelectedItem());

			if (mSelect == "=")
			{
				objectVert.setWesen(1.0);
			}
			else
			{
				if (mSelect == "+")
				{
					objectVert.setWesen(1.1);
				}
				else
				{
					objectVert.setWesen(0.9);
				}
```

Eine Frage stellt sich mir  zum Ende noch. Der Wert den ich als 1. mit der Methode .additem einfüge ist auch standardmäßig eingestellt.

Gibt es eine Methode, mit der ich z. B. den 3. Wert an erste Stelle anzeigen kann, ohne ihn als erste mit .additem einzufügen?


----------



## HimBromBeere (2. Mrz 2012)

Du willst die Elemente deines Datenmodells (das steckt bekanntermaßen hinter der ComboBox) in anderer Reihenfolge darstellen als einfügen? Das geht nicht, da das Swing-Element direkt an das Datenmodel gekoppelt ist. Der Sinn desselben will mir aber auch nicht wirklich einleuchten...


----------



## Kiri (2. Mrz 2012)

schau mal nach 
	
	
	
	





```
JComboBox.setSelectedIndex(Index);
```


----------



## Vampire (2. Mrz 2012)

Ich glaube, du hast mich falsch verstanden.

Hier wäre ein Bsp.:

Rechner: DVs und Kraftreserve ~ Pokemon Inside

Dort ist im Dropdown "=" eingestellt, wenn man aber draufklickt kann man nach oben ein "+" und nach unten ein "-" angeben.

So würde ich es gerne auch haben.


----------



## XHelp (2. Mrz 2012)

Also wenn du schon mit GUI rumspielst, dann solltest du wissen, dass man Strings nichts mit 
	
	
	
	





```
==
```
 vergleicht...


----------



## Vampire (2. Mrz 2012)

Danke dir Kiri, damit hat es funktioniert.

Nochmals Danke an alle, die mir geholfen haben.

lg vampire


----------



## HimBromBeere (2. Mrz 2012)

Ach, du willst nur den anfänglich ausgewählten Eintrag ändern? Dann nimm doch JComboBox#setSelectedIndex(int index).

EDIT: Verdammt, zu spät...


----------



## Vampire (2. Mrz 2012)

Danke für den hinweis xhelp,

ist schon zwei Jahre her, dass ich programmieren gelernt habe, und da vergisst man so einiges.

Benutze jetzt equals


----------

