JTextPane + Bild abspeichern?

sirstefan

Mitglied
Guten Abend,

kommen wir gleich zur Sache. Ich habe angefangen, einen kleinen Texteditor zu schreiben, bei dem es auch möglich sein soll, Bilder einzufügen.
Anfangs habe ich es mit einem JEditorPane probiert und mich mit HTML herumgeschlagen, was aber irgendwie nicht funktioniert hat.

Dann bin ich aber auf das JTextPane mit der Methode insertIcon(Icon) gestoßen, was auch gut funktioniert. Momentan schaut das so aus:
Code:
String bildURL = open.bildsuche();
ImageIcon icon1 = new ImageIcon(bildURL);
textfeld.insertIcon((Icon)icon1);

Will ich den Inhalt des JTextPane abspeichern, wird er einem String in der Klasse Speichern übergeben und ein Dialog geöffnet. (save ist ein Objekt der Klasse Speichern)
Code:
save.setText(textfeld.getText());
save.setVisible(true);

In diesem wird dann per Klick auf "Speichern" die Methode schreiben(File) aufgerufen.
Code:
private void schreiben(File datei){
        byte b;
        try{
            FileOutputStream geschreibsel = new FileOutputStream(datei);
            for(int i = 0; i < text.length(); i++){
                b = (byte)text.charAt(i); 
                geschreibsel.write(b);
            }
            geschreibsel.close();
        }
        catch(IOException e){
            System.out.println(e);
        }
    }
Und hier irgendwo liegt der Hund begraben... wenn ich den Inhalt der JTextPane dem String übergebe, kommt statt dem Bild ein Leerzeichen, was sich dann auch beim Öffnen bemerkbar macht. Das heißt, es gehen jegliche Informationen wie zB der Pfad verloren.

Meine Frage lautet jetzt:
Gibt es eine andere Möglichkeit (außer HTML), mit der ich dieses Problem lösen kann und wenn ja welche?
 
Moin!
In der API steht doch folgendes zu dieser Methode :
Inserts an icon into the document[...]
This is represented in the associated document as an attribute of one character of content.

D.h. in dem AttributeSet befindet sich die Information, ob ein Icon an dieser Stelle vorhanden ist, und falls ja, welchen Pfad es hat
Code:
jTextPane1.setText("test");
jTextPane1.insertIcon(new ImageIcon("c:/test.jpg"));
String text = jTextPane1.getText();
StyledDocument doc = (StyledDocument) jTextPane1.getDocument();
        for(int i = 0; i < jTextPane1.getText().length(); i++){
                System.out.print(text.charAt(i)+" -> ");
                Element el = doc.getCharacterElement(i);
                AttributeSet set = el.getAttributes();
                Enumeration enu = set.getAttributeNames();
                while(enu.hasMoreElements()){
                    Object e = enu.nextElement();
                    System.out.print(e+" : "+set.getAttribute(e)+",");
                }
                System.out.println("");
            }


Ausgabe:
t ->
e ->
s ->
t ->
-> icon : c:/test.jpg,$ename : icon,

*grüssle*
MeinerEiner
 
Danke, das ist schon mal ein guter Denkanstoß.
Aber kann es sein, dass die Ausgabe bei Linux anders ist? Ich programmiere nämlich unter ubuntu, und bekomme das:
Code:
T -> 
e -> 
s -> 
t -> 
i -> 
b -> 
u -> 
s -> 
  -> 
t -> 
o -> 
t -> 
a -> 
l -> 
u -> 
s -> 

 -> 
  -> $ename : icon,icon : /home/stefan/banner.png,
 
Ich denke mal , das hat wenig mit Ubuntu zu tun, sondern das die Reihenfolge der einzelnen Elemente im AttributeSet nicht definiert ist. Und selbst wenn nicht, wo ist das Problem? Den Bilderpfad hast du doch..?!

*grüssle*
MeinerEiner
 
Zurück