PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XML-Anzeige unter Java



Nanatsusaya
17.05.2006, 10:06
Hi,

Ich muss im Zuge meines Studiums ein Java-Programm erstellen, das per Drag and Drop HTML, XML, Text und RTF Format anzeigen kann (nicht den quellcode). Das drag and Drop funktioniert auch ganz gut, allerdings habe ich noch ein Problem mit der XML-Anzeige. Kann ich die auch über ein JEditorPane machen oder wie regel ich das am besten. Außerdem funktioniert bei mir die JScrollPane nicht so wirklich...und bei programmaufruf muss man die datei immer zweimal reindroppen bevor sie angezeigt wird.

Wenn jemand mir irgendwie helfen kann, vielleicht auch tipps, wie man die Programmstruktur verbessert o.ä. wäre ich euch wirklich dankbar. ^^

grüße

natze

BTW: Hier ist der Java-Code:


import java.awt.*;
import java.io.*;
import java.net.URL;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.*;
import javax.swing.*;

public class dndGesamt {
public static void main (String[] args){
Fenster hallo = new Fenster();
}
}

class Fenster extends JFrame {

JFrame testframe;
JLabel testlabel;
JPanel testpanel;
JEditorPane pane;
JTextArea tarea;
DropTargetListener dt;
Object datei;
File test;
String pfad;
String typ;
JPanel panel;
ImageIcon icon;
URL url;
JScrollPane scroll;

public Fenster() {
testframe = new JFrame ("Drag");
testpanel = new JPanel ();
testframe.setLayout(new BorderLayout());


pane = new JEditorPane();
scroll = new JScrollPane(pane);
pane.setEditable(false);


dt= new DropTargetListener() {

// Die Maus betritt die Komponente mit
// einem Objekt
public void dragEnter(DropTargetDragEvent e) {}

// Die Komponente wird verlassen
public void dragExit(DropTargetEvent e) {}

// Die Maus bewegt sich über die Komponente
public void dragOver(DropTargetDragEvent e) {}

public void drop(DropTargetDropEvent e) {
try {
Transferable tr = e.getTransferable();
// Zunächst annehmen
e.acceptDrop (e.getDropAction());
//Get a useful list
java.util.List fileList = (java.util.List)
tr.getTransferData(java.awt.datatransfer.DataFlavor.javaFileListFlavor);


// Convert list to array
java.io.File[] filesTemp = new java.io.File[ fileList.size() ];
fileList.toArray( filesTemp );
final java.io.File[] files = filesTemp;
if (files[0]!=null) {System.out.println(files[0].getAbsolutePath()); }
else {System.out.println("PECH GEHABT");}
pfad=files[0].getAbsolutePath();
url=files[0].toURL();
System.out.println("Datei gedroppped");
typ=endung(pfad);


pane.setVisible(false);
testframe.remove(pane);
testpanel.setVisible(false);
testframe.remove(testpanel);
scroll = new JScrollPane(anzeigen());
testframe.add(anzeigen(), BorderLayout.CENTER);
e.dropComplete(true);
pack();
return;

} catch (Throwable t) { t.printStackTrace(); }
// Ein Problem ist aufgetreten
e.rejectDrop();
}

// Jemand hat die Art des Drops (Move, Copy, Link)
// geändert
public void dropActionChanged(
DropTargetDragEvent e) {}
};

DropTarget dropTarget = new DropTarget(testframe, dt);




testframe.setBounds(10, 10, 400, 400);
testframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
testframe.setVisible(true);
}

//Dateityp wir erkannt und zurück gegeben
public String endung (String p) {
int index;
String typ;
index=p.lastIndexOf('.');
System.out.println(index);
typ=p.substring(index+1, p.length());
System.out.println(typ);
return typ;

}

// Reingezogene Datei wird angezeigt
public JComponent anzeigen () {
String html= "html";
String htm= "htm";
String rtf= "rtf";
String txt= "txt";
String xml= "xml";

String jpg= "JPG";
String gif= "gif";
String png= "png";
String bmp= "bmp";

testpanel.setVisible(false);
JPanel neu;

// HTML,HTM,RTF,txt
if (typ.equals(html)|| typ.equals(rtf) || typ.equals(xml) ||typ.equals(txt) || typ.equals(htm)) {
//validate();

pane = new JEditorPane();
DropTarget dropTarget = new DropTarget(pane, dt);
if(typ.equals(html) || typ.equals(htm))
pane.setContentType("text/html");
else if(typ.equals(rtf))
pane.setContentType("text/rtf");
else if(typ.equals(xml))
pane.setContentType("text/html");
else if(typ.equals(txt))
pane.setContentType("text/txt");
pane.setEditable(false);


BufferedReader lese;
try {
lese = new BufferedReader( new FileReader (pfad));


String temptext="";
String ganztext="";

//Lese alle Zeilen des Textdokuments ein
while (temptext!=null){
temptext=lese.readLine();
if (temptext != null){
if(!temptext.startsWith("<meta"))
ganztext = ganztext + temptext + "\n";
}
}
pane.setText(ganztext);

} catch (IOException e) {
System.out.println("Datei nicht gefunden");
e.printStackTrace();
}


scroll=new JScrollPane(pane);
return pane;

}

//XML
if (typ.equals(xml)) {
neu = new JPanel();
pane = new JEditorPane();
pane.setText("XML-Datei eingelesen");
//System.out.println("Textdatei eingelesen");
return pane;
}




if( typ.equals(jpg)||
typ.equals(gif)||
typ.equals(png)||
typ.equals(bmp))

{
icon = new ImageIcon(pfad);
neu = new JPanel();

testlabel = new JLabel(icon);
testpanel = new JPanel();
testpanel.setLocation(0,0);
testpanel=neu;
testpanel.setVisible(true);
testpanel.add(testlabel);

return testpanel;
}
testpanel = new JPanel();

JOptionPane.showMessageDialog(testframe, "<html><center>" + "Das Programm konnte die von ihnen gewünschte Datei nicht öffnen." + "<br>" + "Dieses Programm unterstützt nur die Formate HTML, XML, TXT und RTF." + "<br>" + "Bitte ziehen Sie mit der Maus eine Datei der oben angeführten Formate in das Programmfenster." + "</center></html>");

return testpanel;



}
}