Hallo!
Ich habe mir einmal euer Tutorial zu JDOM lesen & Schreiben angesehen. An sich ist es ganz gut aber fast ein wenig kurz,
Ich habe zum Beispiel ein kleines Programm geschrieben, es funktioniert aufgrund vieler Fehler noch nicht und ist auch noch nicht fertig. Aber es geht darum über ein "Öffnen" Dialog eine XML Datei, welche ich zuvor erzeugt habe, wieder einzulesen. Mein Problem ist nun, wie ich dies bewerkstelligen soll. Es wird im Tutorial und auch in anderen Büchern davon geschrieben, daß die eingelesen Informationen in einen Speicher geschrieben werden. Wie greife ich nun auf diesen Speicher zu?
Ich habe hier einmal ein paar Ansätze wie ich mir das ganze Vorstelle. Das Programm ist aus der vorherigen Version, in der ich die XML Datei erzeugt habe, enstanden. Daher ist noch einiges an Quelltext davon übrig,
Ich hoffe das ich damit nicht völlig auf dem Holzweg bin, da meine Programmierkenntnisse eher bescheiden sind.
Die XML Datei hat folgendes aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<grafikPanel>
<kachel>
<bild>images/reaktor.jpg</bild>
<x-position>0</x-position>
<y-position>0</y-position>
</kachel>
<kachel>
<bild>images/12.jpg</bild>
<x-position>0</x-position>
<y-position>1</y-position>
</kachel>
<kachel>
<bild>images/13.jpg</bild>
<x-position>0</x-position>
<y-position>2</y-position>
</kachel>
Und die Fehlermeldung die ich ständig bekomme, sehen so aus:
java.lang.Error: Unaufgelˆste Kompilierungsprobleme:
Typabweichung: Konvertierung von java.util.List auf java.awt.List nicht mˆglich
Die Methode iterator() ist f¸r den Typ List nicht definiert (undefined)
at viewer.viewer.laden(viewer.java:237)
at viewer.viewer.actionPerformed(viewer.java:303)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
at avax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenuItemUI.jaa:943)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1590)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
Ich habe mir einmal euer Tutorial zu JDOM lesen & Schreiben angesehen. An sich ist es ganz gut aber fast ein wenig kurz,
Ich habe zum Beispiel ein kleines Programm geschrieben, es funktioniert aufgrund vieler Fehler noch nicht und ist auch noch nicht fertig. Aber es geht darum über ein "Öffnen" Dialog eine XML Datei, welche ich zuvor erzeugt habe, wieder einzulesen. Mein Problem ist nun, wie ich dies bewerkstelligen soll. Es wird im Tutorial und auch in anderen Büchern davon geschrieben, daß die eingelesen Informationen in einen Speicher geschrieben werden. Wie greife ich nun auf diesen Speicher zu?
Ich habe hier einmal ein paar Ansätze wie ich mir das ganze Vorstelle. Das Programm ist aus der vorherigen Version, in der ich die XML Datei erzeugt habe, enstanden. Daher ist noch einiges an Quelltext davon übrig,
Ich hoffe das ich damit nicht völlig auf dem Holzweg bin, da meine Programmierkenntnisse eher bescheiden sind.
PHP:
package viewer;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
//import org.jdom.output.*;
import org.jdom.*;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.xml.sax.*;
import java.util.Iterator;
public class viewer
extends JFrame
implements ActionListener {
// Definition verschiedener Abstandshalter
public static Dimension HGAP10 = new Dimension(10, 1);
public static Dimension HGAP20 = new Dimension(20, 1); //links
public static Dimension VGAP20 = new Dimension(1, 20);//oben
public static Dimension VGAP15 = new Dimension(1, 15);//auswahlboxen
public static Dimension HGAP30 = new Dimension(30, 1);//Schachfeld links
//Erstmaliges f¸llen des zeichnen Panels mit dem speicher
private void firstpaint() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
kachel[i][j] = new JLabel();
(kachel[i][j]).setIcon( (ImageIcon) speicher[i][j]);
zeichnen.add(kachel[i][j]);
}
}
}
//erzeugte XML Datei laden und anzeigen
private void laden() {
String dateiname = "export";
try {
FileDialog fileDlg = new FileDialog(this, "Datei ˆffnen", FileDialog.LOAD);
fileDlg.show();
dateiname = fileDlg.getDirectory();
dateiname = dateiname.concat(fileDlg.getFile());
//Anpassen der Dateiendung an XML
if (!dateiname.endsWith(".xml")) {
char[] temp = dateiname.toCharArray();
String temp2 = "";
for (int i = 0; i < temp.length; i++) {
if (temp[i] == '.') {
for (int j = 0; j < i; j++) {
temp2 = temp2.concat(dateiname.valueOf(temp[j]));
}
break;
}
}
dateiname = (temp2 == "") ? dateiname : temp2;
dateiname = dateiname.concat(".xml");
}
}
catch (NullPointerException n) {
System.err.println(n);
}
//Einlesen mit dem SAX Builder
//Erzeugen eines neuen JDOM Dokuments an der vorher ausgew‰hlten Datei
SAXBuilder sxbuild = new SAXBuilder();
InputSource is = new InputSource(dateiname);
Document doc = sxbuild.build(is);
//Lesen des Wurzelelements des JDOM-Dokuments doc
Element root = doc.getRootElement();
Element grafikPanel = doc.getRootElement(); //Gibt das Root-Element zur¸ck
List grafikPanelInfo = grafikPanel.getContent();
/*Mit der Methode getContent() wird eine Liste mit allen
Elementen und Unterelementen erzeugt*/
//Mit einem Iterator kann diese Liste durchlaufen werden
Iterator grafikPanelIterator = grafikPanelInfo.iterator();
while ( grafikPanelIterator.hasNext() )
{
System.out.println( grafikPanelIterator.next().toString() );
}
}
Die XML Datei hat folgendes aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<grafikPanel>
<kachel>
<bild>images/reaktor.jpg</bild>
<x-position>0</x-position>
<y-position>0</y-position>
</kachel>
<kachel>
<bild>images/12.jpg</bild>
<x-position>0</x-position>
<y-position>1</y-position>
</kachel>
<kachel>
<bild>images/13.jpg</bild>
<x-position>0</x-position>
<y-position>2</y-position>
</kachel>
Und die Fehlermeldung die ich ständig bekomme, sehen so aus:
java.lang.Error: Unaufgelˆste Kompilierungsprobleme:
Typabweichung: Konvertierung von java.util.List auf java.awt.List nicht mˆglich
Die Methode iterator() ist f¸r den Typ List nicht definiert (undefined)
at viewer.viewer.laden(viewer.java:237)
at viewer.viewer.actionPerformed(viewer.java:303)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
at avax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenuItemUI.jaa:943)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1590)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
Zuletzt bearbeitet: