Hallo!
Ich wollte eine JComboBox mit Daten aus einer XML-Datei befüllen.
Leider werden alle Einträge aus der xml-Datei zusammenhängend als Eintrag in der ComboBox ausgegeben.
XML-Datei:
Klasse, die Methode enthält, welche Absender aus XML ausliest
Klasse, die Methode getSender() benutzt:
Ausgabe in JComboBox:
Ein Feld mit "Person1@blabla.orgPerson2@blabla.org"
Was habe ich falsch gemacht?
Wie bekomme ich es hin, dass beide Einträge einzeln in JComboBox aufgeführt werden?
Ich wollte eine JComboBox mit Daten aus einer XML-Datei befüllen.
Leider werden alle Einträge aus der xml-Datei zusammenhängend als Eintrag in der ComboBox ausgegeben.
XML-Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<konfigurationen>
<!--Adresse des Servers, ueber den Mail versendet werden soll-->
<mailserver>mailserver.blabla.de</mailserver>
<!--Festlegung aller moeglichen Absenderadressen-->
<absender>
<mail>Person1@blabla.de</mail>
<mail>Person2@blabla.de</mail>
</absender>
<!--Festlegung aller Empfaengeradressen-->
<empfaenger>
<mail>Person1@blabla.de</mail>
<mail>Person2@blabla.de</mail>
</empfaenger>
<!--Festlegung, ab manuell zusaetzliche Empfaenger eingetragen werden koennen-->
<editierbar>nein</editierbar>
</konfigurationen>
Klasse, die Methode enthält, welche Absender aus XML ausliest
Code:
package adresses;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import application.Application;
/**
* Diese Klasse bietet alle Methoden, um die Konfigurationsdatei der
* moeglichen Absender auszulesen
* @author Stepanski
*
*/
public class Sender {
/**
* 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;
}
}
Klasse, die Methode getSender() benutzt:
Code:
package login;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import adresses.Sender;
import client.Client;
/**
* Diese Methode erzeugt ein LogIn-Fenster.
* Bei Eingabe eines registrierten Nutzers mit dazugehörigem Passwort
* wird das Hauptprogramm geöffnet.
* @author Stepanski
*
*/
public class LogIn extends JFrame{
private static final long serialVersionUID = 1L;
/*Attribute*/
Container container;
JPanel p;
JLabel user;
static JComboBox cb1;
JButton login;
/*Konstruktor*/
/**
* Diese Methode enthält einen Konstruktor, welcher ein
* LogIn-Fenster erzeugt.
*/
public LogIn(){
super();
this.createLogIn();
this.setName("LogIn");
this.setSize(400, 200);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2 ;
setLocation(x, y);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.pack();
}
/**
* Diese Methode legt das Aussehen des
* Panels auf dem LogIn-Fenster fest.
*/
private void createLogIn() {
Container cp = this.getContentPane();
p = new JPanel();
// GridBagLayout, um individuelles Aussehen zu ermöglichen
GridBagLayout gbl = new GridBagLayout();
p.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridheight = 1;
c.gridwidth = 1;
c.insets = new Insets(10,10,10,10);
user = new JLabel("Benutzername: ");
p.add(user, c);
////////////////////////////////////////////////////////////
// ComboBox mit Adressen aufrufen
cb1 =new JComboBox();
c.gridx=1;
c.gridwidth=2;
p.add(cb1, c);
fillSenderCombo();
// KeyListener ermoeglicht Bestaetigung des Passwortes mit
// der Taste "ENTER"
cb1.addKeyListener(new KeyListener () {
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if ( key == KeyEvent.VK_ENTER){
// Liste aller angelegten Nutzer
String nutzer = (String) cb1.getSelectedItem();
System.out.println(nutzer);
// neues Hauptfenster oeffnen
Client client = new Client();
client.setAbsender(nutzer);
// LogIn-Fenster "unsichtbar" machen
LogIn.this.setVisible(false);
// gibt Speicher wieder frei
dispose();
}else
JOptionPane.showMessageDialog(null,
"Anmeldung fehlgeschlagen",
"Error Message", JOptionPane.ERROR_MESSAGE);
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
});
login = new JButton("ENTER");
c.gridx = 3;
c.gridy = 2;
c.insets = new Insets(20,10,10,0);
p.add(login, c);
// gleiche Aktion wie bei KeyListener, nur das diesmal auf
// druecken des Buttons reagiert wird
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
String nutzer = (String) cb1.getSelectedItem();
System.out.println("Nutzer: "+nutzer);
LogIn.this.setVisible(false);
// gibt Speicher wieder frei
dispose();
Client client = new Client();
client.setAbsender(nutzer);
}
});
cp.add(p, BorderLayout.CENTER);
}
/**
* Diese Methode fuellt die JComboBox, welche im Auswahl-Dialog
* eingebettet wird
*/
public static void fillSenderCombo(){
String [] adressen = Sender.getSender();
Arrays.sort(adressen);
for (String i:adressen) {
System.out.println(i);
cb1.addItem(i);
}
}
}
Ausgabe in JComboBox:
Ein Feld mit "Person1@blabla.orgPerson2@blabla.org"
Was habe ich falsch gemacht?
Wie bekomme ich es hin, dass beide Einträge einzeln in JComboBox aufgeführt werden?