JComboBox / Jlist dynamisch aus XML füllen?

martinsig

Grünschnabel
Hi @ all,
vielleicht kann mir jemand weiterhelfen. Im meinem Projekt möchte ich JComboBoxen mit bestimmten Werten füllen.
Man sollte diese Werte hin und wieder erweitern bzw. ändern können ohne den Java Code zu verändern.
Ich habe da, an ein XML file gedacht aus dem ich mir dann die Werte hole. Möchte nicht unbedingt eine Datenbank aufsetzen.
Also quasi eine Configurationsdatei für meine Java Anwendung.

1. Hat jemand schon mal so etwas implementiert? Gibt es da einen eleganten Weg?
2. Wie ist der Aufwand? Ab welcher Größe macht es Sinn, das ganze dynamisch zu gestalten?
3. Wie sieht es mit der Performance aus?
4. Welche Alternative gäbe es hierzu? Vielleicht leichter zu implementieren? config files?

Vielen Dank im Vorraus! :)
Martin
 
martinsig hat gesagt.:
1. Hat jemand schon mal so etwas implementiert? Gibt es da einen eleganten Weg?
2. Wie ist der Aufwand? Ab welcher Größe macht es Sinn, das ganze dynamisch zu gestalten?
3. Wie sieht es mit der Performance aus?
4. Welche Alternative gäbe es hierzu? Vielleicht leichter zu implementieren? config files?
Martin

ad 2. Hat wohl eher nichts mit der Größe zu tun, sondern mit der Aufgabenstellung. Wenn die Werte oft geändert werden, ist das Einlesen aus einem File sinnvoll.
ad 3. Da das Einlesen vermutlich nur einmal beim Starten des Programm geschieht, musst du dir keine Gedanken um die Performance machen.
ad 4. XML-Files sind eine sehr gute Möglichkeit.

Allgemein: Wenn die Einträge der ComboBox dynamisch sind, sinds die entsprechenden Aktionen (wenn einer der Einträge gewählt wird) wohl auch. Hast du dir darüber auch Gedanken gemacht?
 
Hey,
Also ich habe mich vor kurzem erst mit XML (also dem auslesen ;)) beschäftigt und würde das hier als Lösung vorschlagen:
Code:
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import java.util.List;
import java.util.Iterator;
import java.io.*;
public class XMLtry
{
	public static void main(String[]args) throws JDOMException, IOException
	{
	    SAXBuilder sxbuild=new SAXBuilder();
	    Document doc=sxbuild.build("xmltry.xml");
	    Element root=doc.getRootElement();
	    
	    List list=root.getChildren("klasse");
	    Iterator iterator = list.iterator();
	    
	    int length=list.size();
	    int index=0;
	    
	    String[] name=new String[length];
	    String[] Emailadresse=new String[length];
	    while(iterator.hasNext())
	    {
	       
	       Element element=(Element) iterator.next();
	       String first=element.getChild("Name").getText();
	       String second=element.getChild("Emailadresse").getText();
	       name[index]=first;
	       Emailadresse[index]=second;
	       index=index+1;
	    }
	    for(int index1=0; index1<name.length;index1++)
	    {
	        System.out.println(name[index1]);
	        System.out.println(Emailadresse[index1]);
	    }
	}
}
Meintest du sowas?
Zu dem rest kann ich dir leider nichts sagen ;)
mfg,
Tsa
 
Hallo,

falls du nicht zwingend die vorteile einer XML-Datei bzw. das Parsen einer XML-Datei (suchen von Vater Kind Nachbarknoten bzw. neu einfügen usw.) brauchst würde es auch genügen ein einfaches Textfile zeile für zeile einzulesen.
Das ist vermutlich schneller implementiert als der XML-Parser

Gruss
 
matdacat hat gesagt.:
ad 2. Hat wohl eher nichts mit der Größe zu tun, sondern mit der Aufgabenstellung. Wenn die Werte oft geändert werden, ist das Einlesen aus einem File sinnvoll.
ad 3. Da das Einlesen vermutlich nur einmal beim Starten des Programm geschieht, musst du dir keine Gedanken um die Performance machen.
ad 4. XML-Files sind eine sehr gute Möglichkeit.

Allgemein: Wenn die Einträge der ComboBox dynamisch sind, sinds die entsprechenden Aktionen (wenn einer der Einträge gewählt wird) wohl auch. Hast du dir darüber auch Gedanken gemacht?

Danke für die schnelle Antwort.
Gedanken über dynamik. Du hast Recht. Ich möchte es mal an einem Beispiel (machen wir mal ein Beispiel mit Autos) erklären was ich vorhabe.
Und zwar soll der Benutzer beispielsweise in einer JComboBox die Marke VW BMW und Mercedes auswählen können.
Je nach dem was er auswählt sollen in einer JComboBox daneben die Modele der ausgewählten Marke erscheinen. Wählt er beispielsweise BMW so soll daneben nur die Auswahl von 3er 5er usw. möglich sein.
Ich denke, dass ich dies ja ziemlich gut in xml realisieren können und zwar eltern -> kinder. Oder?
Gruß
Martin
 
martinsig hat gesagt.:
Ich denke, dass ich dies ja ziemlich gut in xml realisieren können und zwar eltern -> kinder. Oder?
Ja, das seh ich genauso. Zudem lassen sich dann z.B. verschiedene Attribute für die die Modelle definieren etc.
 
Hier noch eine andere Möglichkeit, Daten aus einer XML-Datei zu lesen:
Code:
/**
	 * Diese Methode liest Schlüssel der Datei aus 
	 * und schreibt diese dann in ein String[]
	 * @return  String[]  senderArray
	 */
	public static String[ ] getSender() {
		
		//String[] anlegen
		String [ ] senderArray = null;
		NodeList tableNameNodeList;
		String tableName;
		
		// Daten aus config.xml auslesen
		try{
			DocumentBuilderFactory factory = DocumentBuilderFactory.
															newInstance();
                         DocumentBuilder builder = factory.newDocumentBuilder();
                         Document document = builder.parse(new File(Application.path+
            												"config.xml"));
                         //NodeList = Liste, in der Eintraege gesammelt werden, ohne
                         //Implementierung festzulegen
                         tableNameNodeList = document.getElementsByTagName("absender");
                         tableName = null;
 
                          if (tableNameNodeList.getLength() > 0){
            	                 senderArray = new String[tableNameNodeList.getLength()];
            	                  for (int i=0; i<tableNameNodeList.getLength(); i++){
                                                   tableName = tableNameNodeList.item(i).
                							getTextContent().toString();
                                                   senderArray[i] = tableName; 
                                                   System.out.println(tableName);                             
                                   }
		          }
		}catch (IOException e){
            System.out.println("IO Fehler");
        }catch (ParserConfigurationException e){
            System.out.println("Parser Fehler");
        }catch (SAXException e){
            System.out.println("SAX Fehler");
        }
        
		return senderArray;		
	}
 
Zurück