# Wert zu Eintrag in ComboBox speichern?!



## FfH (14. Jan 2011)

Hallo liebe Forengemeinde,

ich hab mal eine Frage bezüglich einer Combobox. Ist es möglich, zu einem Eintrag in einer ComboBox einen Wert zu speichern, den man bei Selektion auslesen kann?

Bsp.
Ich habe 7 Wochentage:
0 = Montag
1 = Dienstag
...
6 = Sonntag

Nun möchte ich in einer ComboBox die "Bezeichnung" (Montag, Dienstag...) schreiben (Was kein Problem ist). Beim auslesen der Selektion möchte ich nun aber die Zahl erhalten um damit arbeiten zu können. 

Ist dies möglich oder kennt jemand eine geschickte Lösung in Java 1.6?

Danke schonmal im Voraus
Gruß


----------



## eRaaaa (14. Jan 2011)

Wie wäre es in deinem Fall einfach mit [c]getSelectedIndex()[/c] ?

Ansonsten kann man eben auch, anstatt da Strings in die Box abzulegen, Objekte einer eigenen Klasse ablegen. Diese beinhaltet dann eine ID + String und hat entsprechende getter-Methoden + evtl.  toString() überschrieben.


----------



## FfH (15. Jan 2011)

Hallo,

danke für die Anregungen. 
Die Methode 
	
	
	
	





```
getSelectedIndex()
```
 liefert mir (laut Namen) wahrscheinlich die selektierte Zeile zurück. Dadurch bekäme ich allerdings Probleme, falls ich die Liste anders sortieren möchte...

Ich probiere mal das mit der Klasse, vielen Dank für den Tipp :applaus:


----------



## FfH (16. Jan 2011)

Hallo Zusammen,

ich habe jetzt mal probiert ein Objekt in die ComboBox zu schieben, habe da allerdings ein paar Probleme.

Ich habe mal gegoogelt und folgenden Code gefunden, mit dem ich nicht klar komme!


```
import java.awt.Component;

import javax.swing.*;

public class MyCellRenderer 
extends DefaultListCellRenderer
implements ListCellRenderer  
{    
    // ListCellRenderer-Implementierung ----------------------------------------
    public Component getComboBoxCellRendererComponent(JComboBox box, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {
        
        if(value instanceof faecher) {
            faecher myFach = (faecher)value;
            setText(myFach.BEZ);
        } else {
            setText(value.toString());
        }
        
        return this;
    }  
}
```

Desweiteren habe ich hier eine Klasse "test" und "WochenTag".
Ich ermittle hier zunächst, welcher Wochentag ausgegeben werden soll und gebe den im Anschluss aus. Das Objekt "tag" das ich hier ausgebe, würde ich gerne in die ComboBox schreiben, damit ich an den Wert in "tag.DayNumber" komme. Wie muss ich das in Verbindung mit oben genannter Methode aufrufen?

```
public class test 
{
	public static void main(String[] args) {
		WochenTag tag = new WochenTag(1);
		tag.ausgabe();
	}
}
```


```
public class WochenTag {
	private String 	Day;
	private int 	DayNumber;
	
	
	public WochenTag(int _DayNumber){
		this.DayNumber = _DayNumber;
		setDay();
	}
	
	private void setDay(){
		switch(this.DayNumber){
			case 0:
				Day = "Montag";
				break;
			case 1:
				Day = "Dienstag";
				break;
			case 2:
				Day = "Mittwoch";
				break;
			case 3:
				Day = "Donerstag";
				break;
			case 4:
				Day = "Freitag";
				break;
			case 5:
				Day = "Samstag";
				break;
			case 6:
				Day = "Sonntag";
				break;
			
			default: 
				Day = "Error";
		}	
	}
	
	public void ausgabe(){
		System.out.println(this.Day);
	}
}
```

Vielen Dank für eure Hilfe
Gruß


----------



## eRaaaa (16. Jan 2011)

Also irgendwie ist mir schleierhaft was du da genau vor hast. Wozu einen eigenen Renderer, was hat der mit deiner Beschreibung zu tun? Die Klasse sieht auch ein wenig merkwürdig aus.
Was genau hast du vor?
Ein enum würde sich evtl. auch anbieten

```
public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		JComboBox box = new JComboBox(Wochentag.values());
		box.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if(e.getStateChange()== ItemEvent.SELECTED){
					System.out.println(((Wochentag)e.getItem()).ordinal());
				}
			}
		});
		panel.add(box);
		frame.add(panel);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
```


```
enum Wochentag{
	MONTAG,DIENSTAG,MITTWOCH,DONNERSTAG,FREITAG,SAMSTAG,SONNTAG;

	@Override
	public String toString() {
		String name = super.toString();
		return name.charAt(0)+name.substring(1).toLowerCase();
	}
}
```

jeder Tag hat hier eine eindeutige ID (0-6) schon automatisch und kann über ordinal() abgerufen werden. Wenn dir die IDs nicht passen, könnte man auch eigene angeben(einfach einen privaten Konstruktor bauen der ein int annimt).
Anders sortieren wäre auch kein Problem !!


----------



## FfH (16. Jan 2011)

Ich habe nichts spezielles vor. Ich bin nur dabei Java zu erlernen und bin am experimentieren. 

Es geht jetzt nicht nur explizit um die Wochentage. Das war nur ein erster Versuch. 
Wenn ich das hinbekomme, ist es auch kein Problem mit einer Klasse, die mir Werte aus meiner Datenbank ausliest und diese in ein Objekt speichert.
Nach deiner Idee, ein Objekt in die ComboBox zu schreiben, habe ich gegoogelt und diese Seite hier im Forum gefunden, auf der gesagt wird, man sollte einen Renderer benutzen. Ausgehend davon habe ich weiter gegoogelt und so meine Klasse erstellt.

Hast du vielleicht ein Beispiel wie ich ein Object in meine ComboBox schieben kann?

Danke schonmal


----------



## eRaaaa (16. Jan 2011)

```
class Person{
	private String name;
	private int id;
	
	public Person(String name, int id) {
		this.name = name;
		this.id = id;
	}

	public String getName() {
		return name;
	}
	
	public int getId() {
		return id;
	}
	
	@Override
	public String toString() {
		return name;
	}
}
```


```
public static void main(String[] args) throws Exception {
	     JFrame frame = new JFrame();
	        JPanel panel = new JPanel();
	        Person[] personen = new Person[2];
	        personen[0] = new Person("eRaaaa", 1337);
	        personen[1] = new Person("FfH", 0);
	        JComboBox box = new JComboBox(personen);
	        box.addItemListener(new ItemListener() {
	            public void itemStateChanged(ItemEvent e) {
	                if(e.getStateChange()== ItemEvent.SELECTED){
	                	Person p = (Person) e.getItem();
	                    System.out.println(p.getId()+" "+p.getName());
	                }
	            }
	        });
	        panel.add(box);
	        frame.add(panel);
	        frame.pack();
	        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        frame.setLocationRelativeTo(null);
	        frame.setVisible(true);
	}
```

???:L


----------



## FfH (16. Jan 2011)

Ok vielen Dank, so funktioniert es 

Dankeschön :toll:


----------

