Avatar billede baitianlong Nybegynder
04. september 2004 - 21:48 Der er 9 kommentarer og
1 løsning

Kan man få html kode ud af et JTextPane()

Ganske enkelt.

Findes der en metode, der kan generere html kode fra JTextPane?

Således at man kan redigere teksten med StyledEditorKit, og derefter få indholdet ud som html kode.

:) Det håber jeg, der gør.
Avatar billede baitianlong Nybegynder
04. september 2004 - 21:59 #1
Der er noget med HTMLEditorKit og HTMLFactory(). Hvordan bruger man det ?
Avatar billede Slettet bruger
04. september 2004 - 22:32 #2
Ja, du kan knytte et StyledEditorKit til din JTextPane-komponent, vha. metoden setEditorKit(EditorKit kit). Du skal knytte et HTMLEditorKit til denne komponent såfremt du (i dette tilfælde) vil redigere / arbejde i HTML.

Html-koden kan (efter du har konstrueret et HTML-dokument) så trækkes ud vha. metoden write(Writer out, Document doc, int pos, int len) i HTMLEditorKit'et.

Jeg finder lige et eksempel på en HTML-editor som gør brug af et HTMLEditorKit...
Avatar billede Slettet bruger
04. september 2004 - 22:45 #3
Her er kapitel 20 (i PDF-format) fra "Swing 2nd edition". Det omhandler at bygge en HTML-editor i Java / Swing.

Der skal lige gøres opmærksom på at der tages udgangspunkt i de forrige kapitler (mht. nogle komponenter osv.), men du får den grundlæggende viden (og brudstykker af mere omfattende dele) om hvordan du benytter JTextPane, Document's og StyledEditorKit's.

og URL'en: http://java.sun.com/developer/Books/gui/swing2/swing2_chap20.pdf

Så ligger jeg lige et svar, såfremt du kan bruge noget af det jeg har forsynet dig med. Held og lykke med projektet.

PS: Det skal lige siges at hvis du syntes at JTables var komplicerede UI-komponenter, så er det INGENTING i forhold til JTextPane.
Avatar billede baitianlong Nybegynder
04. september 2004 - 22:50 #4
Jeg fatter ikke det er så vildt...

På et JEditorPane, kan man bare skrive getText(), så får man html koden. Hvorfor hulen findes det ikke på JTextPane
Avatar billede Slettet bruger
04. september 2004 - 23:03 #5
Fordi det er 2 forskellige komponenter?

Det må du ikke spørge mig om, desuden er metoden metoden write(Writer out, Document doc, int pos, int len) i HTMLEditorKit'et da heller ikke så vanskelig at bruge, men nej...den returnerer ikke umiddelbar en String. Der kan dog bruges en StringWriter til at tage imod output, Document kan også fået vha. JTextPane-api'et, pos burde være 0, og længden på dokumentet burde heller ikke være umuligt at anskaffe.

Men... du har ret, det er ikke så nemt som at bruge getText()-metoden og få returneret en streng.
Avatar billede baitianlong Nybegynder
04. september 2004 - 23:12 #6
Kan du vise mig hvordan man bruger write() og StringWriter så ? Jeg vil gerne give flere points, selv om det sjældent er motivationen for folk her :)

Dette lille-bitte eksempel har en Bold knap, og ikke andet. Kan du få html kode ud af det, så er du (sgu) en helt, og jeg vil blive helt rørt...

import javax.swing.text.html.HTMLEditorKit;

public class EditEx {
    private static javax.swing.JTextPane textPane;
   
    public static void main( String[] args ) {
        textPane = new javax.swing.JTextPane();
        textPane.setEditorKit(new HTMLEditorKit());
        javax.swing.JButton button = new javax.swing.JButton("Bold");

        button.addActionListener( new javax.swing.text.StyledEditorKit.BoldAction() );

        javax.swing.JFrame frame = new javax.swing.JFrame();
        frame.getContentPane().add(textPane,java.awt.BorderLayout.CENTER);
        frame.getContentPane().add(button,java.awt.BorderLayout.SOUTH);
        frame.pack();
        frame.show();
    }
}
Avatar billede Slettet bruger
04. september 2004 - 23:42 #7
Hov, har du prøvet med getText()-metoden, JTextPane nedarver jo denne metode fra JEditorPane.
Avatar billede Slettet bruger
04. september 2004 - 23:55 #8
ellers, hvis du gemmer dit gemmer dit HTMLEditorKit i en variabel htmlEditorKit:

StringWriter strWriter = new StringWriter();
htmlEditorKit.write(strWriter, (HTMLDocument)textPane.getStyledDocument(), 0, textPane.getStyledDocument().getLength());
String html = strWriter.toString();

(Jeg tror det skal være som ovenstående, har ikke testet det... husk at importere java.io.*;)
Avatar billede baitianlong Nybegynder
05. september 2004 - 00:05 #9
Jeg ved ikke lige hvad der sker for mig, men getText() var vinderen. Jeg er bange for at jeg har testet med en for gammel version af JRE, men med 1.5.0 var det en vinder. Hvis du har lyst kan du prøve dette reviderede eks.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.text.html.HTMLEditorKit;

public class EditEx {
    private static javax.swing.JTextPane textPane;
   
    public static void main( String[] args ) {
        textPane = new javax.swing.JTextPane();
        textPane.setEditorKit(new HTMLEditorKit());
        javax.swing.JButton button1 = new javax.swing.JButton("Bold");
        javax.swing.JButton button2 = new javax.swing.JButton("Save");

        button1.addActionListener(new javax.swing.text.StyledEditorKit.BoldAction() );
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                focus();
            }
        });
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                skrivLort();
                focus();
            }
        });

        javax.swing.JFrame frame = new javax.swing.JFrame();
        frame.getContentPane().add(textPane,java.awt.BorderLayout.NORTH);
        frame.getContentPane().add(button1,java.awt.BorderLayout.WEST);
        frame.getContentPane().add(button2,java.awt.BorderLayout.EAST);
        frame.pack();
        frame.show();
    }
    public static void skrivLort() {
        System.out.println(textPane.getText());
    }
    public static void focus() {
        textPane.requestFocus();
    }
}

Det er simpelthen smukt. Tusind tak for din hjælp :)
Avatar billede Slettet bruger
05. september 2004 - 00:25 #10
Jamen så siger jeg da mange tak for pointene :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester