Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe nun so viele JTables erstellt, dass ich kein Bock mehr darauf habe, alles immer wieder machen zu müssen.
Ich will am liebsten eine Klasse, die die JTable, die TableColumns, die TableCellRenderer, das TableModel etc in einer Klasse verbindet.
Was dann nur noch gemacht werden soll: Ein Objekt soll beim erstellen dieser Tabelle (oder später) übergeben werden und anhand dieses Objekts sollen dann die Tabellenspalten angelegt werden, der Renderer soll automatisch gewählt werden etc.
So dass man sich nichtmehr um das erstellen der Table kümmern muss.
Gibt's dafür gute Vorlagen? Vorschläge?
Hat jemand mal was ähnliches gemacht?
Ich komme da noch nicht so recht auf den grünen Zweig.
Daher wäre ich für jeden Vorschlag/Denkanstoss dankbar!
ich persönlich halte für automatisierung immer noch xml für empfehlenswert... gib dort alle infos an bzw. die zu verwendeten Klassen.... im Programm wird das xml geladen und die werte gesetzt bzw. die Klassen geladen....
Das ist natürlich auch eine gute idee.
Allerdings habe ich mit dem Parsen von XML-Dateien noch so meine Probleme.
Ich bekomme es nicht wirklich auf einfache Art hin, eine XML-Datei sauber zu Parsen.
Bisher habe ich mir übergangsmäßig Methode geschrieben, die die XML-Datei Zeile für Zeile durchgehen und falls dort ein Start-Tag kam, werden die nächsten X zeilen durchgangen, so lange, wie die Anzahl der Elemente halt ist.
z.B.
<data>
<cd> // Bis ein cd-Element kam Zeile für Zeile parsen und dann
// die Anzahl der Elemente (3) weiterparsen
<id>1</id>
<name>Test</name>
<interpretid>1</interpretid>
</cd>
...
Gibt es nicht eine leichte elegante Lösung?
Mit dem SAXParser komme ich nicht wirklich klar...
Hab ich ja schon, hab auch schon andere Seiten zu Sax und zu (J)DOM durchgesucht/-lesen.
Nur gibt es scheinbar keine 'einfache' Methode eine XML Datei einzulesen...
Gespeichert habe ich meine Daten bisher z.B. in folgender Form:
Wenn ich nun eine JTable speichern würde, würde ich das am liebsten Ähnlich machen...
Wie ich das am besten speichern könnte ist nur das nächste Rätsel für mich...
mal sehen.
Nur ich will mir eigentlich grundlegend eine Klasse erstellen, die XML-Dateien simpel auslesen kann. Nur gibt es keine einfache Methode irgendwie.
Ich habe mir nun eine Klasse erstellt, die die Dateien ausliest, ist zwar alles noch zu testzwecken, daher unsauber, aber naja.
She&s wandelt der SAX-Parser auch schön in She's automatic um, jedoch nicht ganz so, wie es soll:
// Beispieldatensatz
id - 24
name - She
name - \'
name - s automatic
interpretid - 2
interpret - Rancid
albumid - 2
album - And out come the wolves
nr - 12
laenge - null
lyric - null
info - null
dateadd - 1097826508
dateaddf - 15.10.2004, 09:48:28
lastchange - 0
Wie kann man ihm beibringen, dass er es in She's automatic umwandeln soll?
Oder muss ich dann ne Abfrage machen, ob es der Tag 'name' ist und dann das ganze zusammenbasteln?
Hier ist mal der Quelltext mit einem Auszug aus der XML-Datei:
Klasse:
Code:
package de.mtf.xml;
import java.io.FileReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import org.apache.xerces.parsers.SAXParser;
public class Mtf_XMLReader extends DefaultHandler {
private boolean bolStartTag = false;
private String strTag = null;
private String strValue = null;
private String FilePath = null;
public static void main(String args[]) {
Mtf_XMLReader xml = null;
try {
xml = new Mtf_XMLReader();
} catch (Exception e) {
System.out.println("Kann das dokument nicht finden!");
}
xml.parse("track.xml");
}
public Mtf_XMLReader() {
super();
}
public void parse(String p_strFilePath) {
try {
setFilePath(p_strFilePath);
XMLReader xr = XMLReaderFactory.createXMLReader();
Mtf_XMLReader handler = new Mtf_XMLReader();
xr.setContentHandler(handler);
xr.setErrorHandler(handler);
FileReader r = new FileReader(getFilePath());
xr.parse(new InputSource(r));
} catch (Exception e) {
System.out.println("Fehler beim parsen!");
}
}
public void startDocument() {
System.out.println("Start document");
}
public void endDocument() {
System.out.println("End document");
}
public void startElement(String uri, String name, String qName, Attributes atts) {
setStrTag(qName);
setBolStartTag(true);
}
public void endElement(String uri, String name, String qName) {
setBolStartTag(false);
}
public void characters(char ch[], int start, int length) {
StringBuffer Value = new StringBuffer();
Value.setLength(0);
for (int i = start; i < start + length; i++) {
switch (ch[i]) {
case '\\' :
Value.append("\\\\");
break;
case '"' :
Value.append("\\\"");
break;
case '\'' :
Value.append("\\\'");
break;
case '\n' :
Value.append("\\\n");
break;
case '\r' :
Value.append("\\\r");
break;
case '\t' :
Value.append("\\\t");
break;
default :
Value.append(ch[i]);
break;
}
}
setStrValue(Value.toString());
ObjectFuellen();
}
private void ObjectFuellen() {
// Testausgabe
if (bolStartTag && !getStrTag().equalsIgnoreCase("Track")) {
System.out.println(getStrTag() + " - " + getStrValue());
}
}
public String getFilePath() {
return FilePath;
}
public void setFilePath(String string) {
FilePath = string;
}
public String getStrTag() {
return strTag;
}
public String getStrValue() {
return strValue;
}
public void setStrTag(String string) {
strTag = string;
}
public void setStrValue(String string) {
strValue = string;
}
public boolean isBolStartTag() {
return bolStartTag;
}
public void setBolStartTag(boolean b) {
bolStartTag = b;
}
}
Bis auf das Problem, dass er das Sax mit das hier mehrzeilig liefert:
So sollte es sein:
She's automatic
So ist es:
She
\'
s automatic
Dann steht in der Datenbank nur später
s automatic
tja, bis auf dieses problem funktioniert das schon sehr gut, allerdings habe ich mir grad eine Track.xml Datei exportiert, die ca 60000 Einträge hat und ca 40MB gross ist. Das Importieren dieser Datei dauert nun schon ca 15 Minuten und er ist beim 34xxx. Datensatz.
Ist ein wenig lahm, finde ich jedenfalls. Wie kann man das ganze noch ein wenig optimieren?