# Bei JComboBox einem Eintrag Wert zuweisen



## pc-world (14. Jun 2008)

Gibt es bei einer JComboBox eine Funktion, nicht den Index eines ausgewählten Eintrags zu erhalten (und auch keinen String), sondern einen Wert, den man ihm vorher zugewiesen hat?

Aus HTML kenne ich das so:

```
<select name="Pizza" size="5"
        onchange="alert(this.form.Pizza.options[this.form.Pizza.selectedIndex].value)">
      <option value="P101">Pizza Napoli</option>
      <option value="P102">Pizza Funghi</option>
      <option value="P103">Pizza Mare</option>
      <option value="P104">Pizza Tonno</option>
      <option value="P105">Pizza Mexicana</option>
      <option value="P106">Pizza Regina</option>
      <option value="P107">Pizza de la Casa</option>
      <option value="P108">Pizza Calzone</option>
      <option value="P109">Pizza con tutti</option>
    </select>
```

Gibt es das in Java auch?


----------



## tfa (14. Jun 2008)

Benutze ein ComboBoxModel. Da gibt es getSelectedItem(). In das Model kannst du beliebige Werte (d.h. Objekte) packen.


----------



## pc-world (14. Jun 2008)

tfa hat gesagt.:
			
		

> Benutze ein ComboBoxModel. Da gibt es getSelectedItem(). In das Model kannst du beliebige Werte (d.h. Objekte) packen.



Wie genau mache ich das?


```
JComboBox liste = new JComboBox();
```
Und jetzt die Methode addItem() verwenden?
Wie passe ich an, was angezeigt werden soll, und was ich bei der Abfrage erhalten will?


----------



## tfa (14. Jun 2008)

```
JComboBox liste = new JComboBox();
DefaultComboBoxModel model = new DefaultComboBoxModel(objektArray);
liste.setModel(model);
```
objektArray ist ein Array der Objekte, die in der Combobox angezeigt werden sollen. 
Um den Anzeigetext zu bekommen, wird für jedes Objekt die toString()-Methode aufgerufen.
Bei der Abfrage erhälst du das Objekt aus dem Array, das ausgewählt wurde.

http://java.sun.com/javase/6/docs/api/javax/swing/DefaultComboBoxModel.html


----------



## Wildcard (14. Jun 2008)

Du bekommst immer das raus, was du rein gesteckt hast. Die Visualisierung übernimmt ein Renderer.
Der einfache Standardrenderer ruft zB einfach item.toString auf zeichnet den String.


----------



## pc-world (14. Jun 2008)

Jetzt bin ich schonmal so weit:

```
package testPackage2;

import javax.swing.*;

public class JComboBoxTest {

	public static void main(String[] args) {
		JFrame fenster = new JFrame("Test");
		fenster.setSize(400, 400);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel();
		JComboBoxWert[] objektArray = { new JComboBoxWert("text", 5),
				new JComboBoxWert("hi", 7) };
		JComboBox liste = new JComboBox();
		DefaultComboBoxModel model = new DefaultComboBoxModel(objektArray);
		liste.setModel(model);
		panel.add(liste);
		fenster.add(panel);
		fenster.setVisible(true);
	}

}

class JComboBoxWert {
	public String text;
	public int wert;

	private JComboBoxWert() {
	}

	public JComboBoxWert(String a, int b) {
		text = a;
		wert = b;
	}

	public String toString() {
		return text;
	}
}
```

Kann ich jetzt die Methode getSelectedItem() so überschreiben, dass sie mir nicht das ganze Objekt rüberreicht, sondern nur den Wert von der Variablen wert?
Oder gibt es da eine einfachere Lösung?


----------



## daNny (14. Jun 2008)

Nunja... eigentlich hast du doch schon alles, was du brauchst.


```
String text = ((JComboBoxWert)liste.getModel().getSelectedItem()).text;
int wert = ((JComboBoxWert)liste.getModel().getSelectedItem()).wert;
```

Also einfach nur das Objekt, was durch *getSelectedItem()* zurückgeliefert wird, casten. Da deine Attribute public sind, kann man ja dann direkt drauf zugreifen.


----------



## pc-world (15. Jun 2008)

Danke, hab' jetzt alles hinbekommen.


```
package testPackage2;

import java.awt.event.*;
import javax.swing.*;

public class JComboBoxTest {

	static JComboBox liste = new JComboBox();

	public static void main(String[] args) {
		JFrame fenster = new JFrame("Test");
		fenster.setSize(400, 400);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel();
		JComboBoxWert[] objektArray = { new JComboBoxWert("text", 5),
				new JComboBoxWert("hi", 7) };
		DefaultComboBoxModel model = new DefaultComboBoxModel(objektArray);
		liste.setModel(model);
		liste.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int wert = ((JComboBoxWert) liste.getModel().getSelectedItem()).wert;
				System.out.println(wert);
			}
		});
		panel.add(liste);
		fenster.add(panel);
		fenster.setVisible(true);
	}

}

class JComboBoxWert {
	public String text;
	public int wert;

	private JComboBoxWert() {
	}

	public JComboBoxWert(String a, int b) {
		text = a;
		wert = b;
	}

	public String toString() {
		return text;
	}
}
```


----------

