# Inhalt von JComboBox serialisieren nach XML ?



## will2k (16. Februar 2008)

Hallo,

wie würdet ihr am geschicktesten den string inhalt einer jcombobox in eine xml datei serialisieren?


----------



## The_Answer1985 (16. Februar 2008)

Hi,

ich würde den Wert aus den ComboBox einfach auslesen und mittels JDom in eine XML Datei schreiben.

War das dein Problem oder brauchst du zusätzl. Infos?

MfG


----------



## will2k (16. Februar 2008)

Ich habe schon mit JAXB angefangen daten wie Zustände einer jcombobox,radion button,check box auszulesen oder werte aus textfields/textarea auszulesen/saven und wieder zu laden. Alle diese attribute sind in der TemplateData Klasse definiert.

xml saven:


```
JAXBContext jc = JAXBContext.newInstance(TemplateData.class);			
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);		    
OutputStream os = new FileOutputStream( "test.xml" );
TemplateData object = new TemplateData();		    
		  		    		    object.setSpaceBeforeLeftParagraph(Integer.valueOf(spaceBeforeLeftParagraphTF.getText()));
object.setSpaceBeforeText(Integer.valueOf(spaceBeforeTextTF.getText()));		   
object.setAlignment(alignmentCB.getSelectedItem().toString());		    

m.marshal(object, os);
```

Nun würde ich gerne wissen wie ich die strings aus einer JCombobox auslese bzw. meiner TemplateData Klasse hinzufüge? Ich habe schon versucht in der TD Klasse für jede Jcombobox eine Arraylist zu erstellen:


```
private ArrayList<String> bezeichnungAL = new ArrayList<String>();
```

doch das auslesen der jcombobox und einlesen der werte in einer forschleife in die Arraylist der TempalteData Klasse führt zu nichts, wird nichts gespeichert...


```
for(int i = 0 ; i < bezeichnungCB.size() ; i++)
		    {
		    	object.setBezeichnungAL(bezeichnungCB.getItemAt(i).toString());		    	
		    }	
		    
		    m.marshal(object, os);
```

ich bekomme einen nullpointer naja erstmal würde ich gerne wissen wie ich .size() in einen int caste bzw. den rückgabewert?

.size() ist sowieso deprecated doch was ist die neue methode um die anzahl elemente einer jcombobox herauszufinden?


----------



## The_Answer1985 (16. Februar 2008)

Zum EInen ist der Blick in die Doku ganz hilfreich:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JComboBox.html

Da findest du auch für zukünftige Fragen passende Antworten:



> ich bekomme einen nullpointer naja erstmal würde ich gerne wissen wie ich .size() in einen int caste bzw. den rückgabewert?
> 
> .size() ist sowieso deprecated doch was ist die neue methode um die anzahl elemente einer jcombobox herauszufinden?



Um die Anzahl der Elemente aus der Liste zu ziehen benutzt du *getItemCount(), *die liefert dir bereits einen *int-Wert *zurück, also musst du da nichts casten.

Allgemein zum Casten sind die Wrapper-Klassen wichtig:
http://www.galileodesign.de/openbook/javainsel5/javainsel08_001.htm#Rxx747java080010400029A1F018100



> Nun würde ich gerne wissen wie ich die strings aus einer JCombobox auslese bzw. meiner TemplateData Klasse hinzufüge? Ich habe schon versucht in der TD Klasse für jede Jcombobox eine Arraylist zu erstellen:



Werte aus der ComboBox erhälst du entweder durch *getSelectedItem() *oder *getSelectedIndex()* wenn du nur den Indexwert des gewählten Eintrags haben möchtest.

Wie du die Werte in deine Template-Klasse bekommst kann ich dir nicht sagen, weil ich deine Klasse nicht kenne 

MfG


----------



## will2k (16. Februar 2008)

> Wie du die Werte in deine Template-Klasse bekommst kann ich dir nicht sagen, weil ich deine Klasse nicht kenne



wer wird denn quängeln ;-)

beispiel daten klasse: wie gesagt das serialisieren nach xml von textfields, areas etc geht alles... habe das anhängen bzw. adden des strings in die AL mit dem debugger verfolgt da stimmt auch alles, nur wirds nicht in der xml datei gespeichert ?


```
@XmlRootElement()
public class SettingsData implements Serializable
{

	private static final long serialVersionUID = 1L;

	
	private ArrayList<String> bezeichnungAL = new ArrayList<String>();
	
	
	public SettingsData()
	{		
	}

        // setXX()
        public void setBezeichnungAL(String bezeichnungAL)
       {
                // String an bezeichnungAL anhängen...
		this.bezeichnungAL.add(bezeichnungAL);
	}

}
```


----------



## The_Answer1985 (17. Februar 2008)

Lass dir mal bevor du in XML exportierst den Inhalt der ArrayList auf deiner Konsole ausgeben:


```
for(int i = 0; i < bezeichnungAL.size(); i++){
       System.out.println(bezeichnungAL.get(i));
}
```

Wird da was ausgegeben bzw. das ausgegeben was du auch in der ComboBox gewählt hast?
Wenn ja liegt es wohl an deiner Methode zum Speichern als XML Datei. Dann solltest du evtl. mal den zusammenhängenden Code der Methode posten.

MfG


----------



## will2k (18. Februar 2008)

danke für die antwort, ich habe das ganze jetzt noc nicth getestet, doch der code den du willst steht alles in den posts darüber:

Hier lese ich z.B. die strings aus der jcombobox in das ArrayList ein:

```
JAXBContext jc = JAXBContext.newInstance(TemplateData.class);			
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);		    
OutputStream os = new FileOutputStream( "test.xml" );
TemplateData object = new TemplateData();	

for(int i = 0 ; i < bezeichnungCB.size() ; i++)
		    {
		    	object.setBezeichnungAL(bezeichnungCB.getItemAt(i).toString());		    	
		    }	
		    
		    m.marshal(object, os);

m.marshal(object, os);
```
 Das ist der gleiche Code aber bereits schon oben gepostet wurde nur steht er jetzt besser im Zusammenhang.


----------



## The_Answer1985 (18. Februar 2008)

> danke für die antwort, ich habe das ganze jetzt noc nicth getestet, doch der code den du willst steht alles in den posts darüber


 
Schön, aber ich wollte eigentlich zumindest eine zusammenhängende Methode, damit ich seh wie du die ArrayListe mit dem Inhalt aus der ComboBox an die Methode übergibst, die die XML Datei erzeugt.

Das war von deinen Posts vorher nicht ersichtlich...

Bei deinem Problem weiter helfen kann ich dir bis Weilen trotzdem nicht, weil du mein Vorschlag vom vorherigen Post noch nicht berücksichtigt hast.

Wenn du das getan hast, haben wir einen Ansatz...

so long

MfG


----------



## will2k (18. Februar 2008)

> Bei deinem Problem weiter helfen kann ich dir bis Weilen trotzdem nicht, weil du mein Vorschlag vom vorherigen Post noch nicht berücksichtigt hast.



so getan:


```
try
{ 
	JAXBContext jc = JAXBContext.newInstance(SettingsData.class);			
	Marshaller m = jc.createMarshaller();
	 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);			    
	
	 OutputStream os = new FileOutputStream("settings.xml");
	  SettingsData object = new SettingsData();	
		    
		    for(int i = 0 ; i < bezeichnungCB.getItemCount() ; i++ )
		    {
		    	object.setBezeichnungAL(bezeichnungCB.getItemAt(i).toString());
		    }	
		    
		    for(int i = 0; i < object.getBezeichnungAL().size(); i++)
		    {
		        System.out.println(object.getBezeichnungAL().get(i));
		 }
		    
		    m.marshal(object, os);			 	
		}
```

Über System.out.println gebe ich den Inhalt des Arrays bezeichnungAL aus und es kommt genau das was in der JComboBox drin steht tja eingelesen ist es demnach richtig... dennoch wird es nicht in der XML Datei mit JAXB gespeichert? Kann JAXB keine Liste serialisieren?


----------



## will2k (19. Februar 2008)

hat keiner einen Rat?


----------



## The_Answer1985 (20. Februar 2008)

Es mag sein, dass ich es übersehe, aber wo in deinem Code legst du fest, dass er den Inhalt der ArrayList in XML speichern soll?


```
for(int i = 0 ; i < bezeichnungCB.getItemCount() ; i++ ){
       object.setBezeichnungAL(bezeichnungCB.getItemAt(i).toString());
}

m.marshal(object, os);
```

In diesem Code-Segment arbeitest du nur mit der ComboBox und übergibst dein object an den Marshaller, also wo verwendest du die ArrayList?

MfG


----------



## will2k (20. Februar 2008)

> In diesem Code-Segment arbeitest du nur mit der ComboBox und übergibst dein object an den Marshaller, also wo verwendest du die ArrayList?



hier bzw. siehe ganz am Anfang des Threads:

```
public void setBezeichnungAL(String bezeichnungAL)
       {
                // String an bezeichnungAL anhängen...
		this.bezeichnungAL.add(bezeichnungAL);
	}
```

damit lese ich den übergebenen string in die ArrayList "bezeichnungAL" ein da. bezeichnungAL befindet sich in der Klasse SettingsData und wird über die Instanz object.setBezeichnungAL(string) gefüllt.

Kann es vllt. sein, dass um JAXB 2.0 zu nutzen oder jaxb allgemein ich noch etwas zusätzlich installieren muss? Habe mir mal das jaxb 2.0 buch auf amazon bzw. inhaltsverzeichnis durchgelesen mit listen usw. scheint so als mache ich was grundlegend falsches bzw. mache best. dinge überhaupt nicht...


----------



## The_Answer1985 (20. Februar 2008)

Hast du "einfach so" zu JAXB gegriffen oder hast du dich vor der Anwendung drüber informiert?

Zum Einlesen wäre ein kleiner Ausflug auf die Insel vllt ratsam:

http://www.galileocomputing.de/openbook/javainsel7/javainsel_14_008.htm

Da bekommst du ne kurze, prägnante Erklärung geboten.

MfG


----------



## will2k (20. Februar 2008)

The_Answer1985 hat gesagt.:


> Hast du "einfach so" zu JAXB gegriffen oder hast du dich vor der Anwendung drüber informiert?
> 
> Zum Einlesen wäre ein kleiner Ausflug auf die Insel vllt ratsam:
> 
> ...


 alles was dort steht habe ich bereits gemacht. Wie gesagt alles geht zu serialisieren nur nicht Listen... bzw. auf java insel gibt es kein beispiel für das serialisieren von listen nacht xml aber egal ich habe mir das JAXB 2.0 buch auf amazon bestellt, da JAXB 2.x jeder ernsthafte java coder beherrschen sollte


----------



## The_Answer1985 (21. Februar 2008)

Ok, hoffe du kommst damit weiter!
Viel Spaß beim Coden!

MfG


----------



## The_Answer1985 (21. Februar 2008)

Ok, hoffe du kommst damit weiter!
Viel Spaß beim Coden!

MfG


----------

