Hallo,
Ich habe ein Programm geschrieben was Daten per GUI in eine ArrayList schreibt. Diese ArrayLisst speichere ich wie folgt als XML ab:
In einem anderen JFrame (das sich per Button klick auf der GUI öffnet) habe ich jetzt eine JTable. Diese JTable soll mit Daten die aus der XML gelesen werden (DOMReader) aufgefüllt werden. Also beim Buttonklick auf "Tabelle anzeigen" soll das JFrame mit der Tabelle geöffnet werden und die aktuelle Datei dort darstellen.
Hier ein Test von mir (im Java codebook gesehen
)
Das ist nur ein Test gewesen und würde so funktionieren. Nur würde ich jetzt gern meine Klasse die "TableView" heißt und die JTable enthält benutzen um auf das Dokument zugreifen zu können.
Ich wäre für Tipps sehr dankbar.[/quote]
Ich habe ein Programm geschrieben was Daten per GUI in eine ArrayList schreibt. Diese ArrayLisst speichere ich wie folgt als XML ab:
Code:
import org.w3c.dom.*;
import org.apache.xerces.dom.DOMImplementationImpl;
import org.apache.xml.serialize.*;
import java.io.*;
import java.util.ArrayList;
public class RecordListGenerator {
private ArrayList<Album> alben;
private XMLGui gui;
public RecordListGenerator(ArrayList<Album> alben, XMLGui gui)
{
this.alben = alben;
this.gui = gui;
}
public void writeXML(String xmlFile, Document doc)
{
try
{
FileWriter writer = new FileWriter(new File(xmlFile));
OutputFormat formatter = new OutputFormat();
formatter.setEncoding("ISO-8859-1");
formatter.setIndenting(true);
formatter.setIndent(5);
formatter.setLineSeparator("\r\n");
XMLSerializer serializer = new XMLSerializer(writer, formatter);
serializer.serialize(doc);
}
catch (Exception ex)
{
System.out.println("Fehler: " + ex.getMessage());
}
}
public Document createDom()
{
Document doc = null;
if (!alben.isEmpty())
{
DOMImplementationImpl domImpl = new DOMImplementationImpl();
doc = domImpl.createDocument(null, "RecordList", null);
//DTD
DocumentType docType = domImpl.createDocumentType("RecordList", null, "RecordList.dtd");
doc.appendChild(docType);
int anzahl = 1;
for (Album a : alben)
{
Element elRecord = doc.createElement("Record");
elRecord.setAttribute("Record_ID", "_000" + anzahl);
elRecord.setAttribute("CatalogID", a.getcatalogid());
elRecord.setAttribute("Format", a.getformat());
Element elArtist = doc.createElement("Artist");
Text tnArtist = doc.createTextNode(a.getartist());
elArtist.appendChild(tnArtist);
Element elTitle = doc.createElement("Title");
Text tnTitle = doc.createTextNode(a.gettitle());
elTitle.appendChild(tnTitle);
Element elRecordlabel = doc.createElement("Recordlabel");
Text tnReclabel = doc.createTextNode(a.getreclabel());
elRecordlabel.appendChild(tnReclabel);
Element elGenre = doc.createElement("Genre");
Text tnGenre= doc.createTextNode(a.getgenre());
elGenre.appendChild(tnGenre);
elRecord.appendChild(elArtist);
elRecord.appendChild(elTitle);
elRecord.appendChild(elRecordlabel);
elRecord.appendChild(elGenre);
doc.getDocumentElement().appendChild(elRecord);
anzahl ++;
}
}
return doc;
}
public void domWrite(String xmlFile)
{
writeXML(xmlFile, createDom());
}
}
In einem anderen JFrame (das sich per Button klick auf der GUI öffnet) habe ich jetzt eine JTable. Diese JTable soll mit Daten die aus der XML gelesen werden (DOMReader) aufgefüllt werden. Also beim Buttonklick auf "Tabelle anzeigen" soll das JFrame mit der Tabelle geöffnet werden und die aktuelle Datei dort darstellen.
Hier ein Test von mir (im Java codebook gesehen
Code:
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import java.io.IOException;
public class DomReader
{
public void domRead(String documentName)
{
// Parser zum Einlesen des Dokuments erzeugen
DOMParser parser = new DOMParser();
try {
// Dokument einlesen
parser.parse(documentName);
// Dokument verarbeiten
analyze(parser.getDocument());
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Analysiert den übergebenen Knoten
* @param node Zu analysierender Knoten
*/
private void analyze(Node node) {
// Wenn es sich um einen Text-Knoten handelt, Inhalt ausgeben
if(node != null &&
node.getNodeType() == Node.TEXT_NODE) {
// Wert lokal zwischenspeichern
String value = node.getNodeValue().trim();
// Wenn Textinhalt vorhanden, dann ausgeben
if(value.length() > 0) {
System.out.println(String.format("Wert: %s", value));
}
} else {
// Name des Knotens ausgeben
System.out.println(
String.format("Gefundendes Element: %s",
node.getNodeName()));
// Überprüfen, ob untergeordnete Knoten existieren
if(node.hasChildNodes()) {
// Alle untergeordneten Knoten durchlaufen
for(int i=0,
items = node.getChildNodes().getLength();
i<items;i++) {
// Aktuellen Knoten analysieren
analyze(node.getChildNodes().item(i));
}
}
}
}
}
Das ist nur ein Test gewesen und würde so funktionieren. Nur würde ich jetzt gern meine Klasse die "TableView" heißt und die JTable enthält benutzen um auf das Dokument zugreifen zu können.
Ich wäre für Tipps sehr dankbar.[/quote]