# getText() sinnlos bei HTMLEditorKit und JEditorPane!



## che (7. Jan 2006)

Hallo!

Ich habe hier ein kleines Problem mit getText(). Ich habe eine JEditorPane Komponente erstellt und dieser HTMLEditorKit als Editor zugewiesen. Möchte ich nun mit getText den Inhalt der JEditorPane Komponente abfragen, so liefert mir das System das HTML Gerüst und die aktuelle Eingabe, die ich in der JEditorPane Komponente gemacht habe. Ich kann es zwar verstehen, dass das HTML Gerüst zurückgeliefert wird, da HTMLEditorKit, aber ich möchte die HTML-Tags nicht, sondern lediglich meine Eingabe ohne den HTML Kram. Man könnte durch viel Mühe und Zeit auch dieses Problem lösen, aber gibt es vielleicht eine Operation oder ein Methode, die ich in der Doc übersehen haben könnte?

Grüsse, che


----------



## André Uhres (8. Jan 2006)

Html Formular


----------



## Guest (18. Jan 2006)

```
private void setHTMLEditor(JEditorPane editorPane){ 
        editorPane.setEditorKit(new HTMLEditorKit() { 
            public ViewFactory getViewFactory() { 
                return new HTMLEditorKit.HTMLFactory() { 
                    public View create(Element elem) { 
                        Object o = elem.getAttributes().getAttribute(StyleConstants.NameAttribute); 
                        if (o instanceof HTML.Tag) { 
                            HTML.Tag kind = (HTML.Tag) o; 
                            if (kind == HTML.Tag.INPUT ) 
                                return new FormView(elem) { 
                                    protected void submitData(String data) { 
                                        showData(data); 
                                    } 
                                }; 
                        } 
                        return super.create(elem); 
                    } 
                }; 
            } 
        }); 
    }
```

Sorry, ich begreife deine Lösung nicht. Ich ärgere mich schon seit einiger Zeit mit diesem Problem. Habe dies versucht: Den Text mit getText gelesen und den String auf HTML Tags untersucht und dann durch "" ersetzt. Ich dachte ich hätte das HTML Gerüst somit entfernt und würde als Resultat die rohe Eingabe erhalten -sowie man sie z.B. von JTextField erhält-, aber es funktionierte leider nicht. Bin für jeden Tipp dankbar...


----------



## André Uhres (18. Jan 2006)

Die Methode submitData(..) der Klasse javax.swing.text.html.FormView ist für die Datenübertragung 
verantwortlich. Die Methode wird hier für den HTML-Tag "input" (<input type='submit'>) aktiviert, 
d.h. für den Knopf unten im Formular (<form>...</form>). 
Der String "data" enthält die Daten des Formulars.
Er besteht aus key-value Paaren welche durch & getrennt sind:
"Vorname=Andre&Nachname=Uhres&Geschlecht=M%E4nnlich&Bemerkung=+++++++Ich+spreche+deutsch%2C+franz%F6sisch+und+englisch"
Dieser String wird an die Methode showData(..) weitergegeben um dort in einem Dialog angezeigt zuwerden.


----------



## che (19. Jan 2006)

Jetzt check ich das, ist leider nicht das was ich brauche. Wie schon erwähnt: Ich möchte aus einem JEditorPane, der einen HTMLEditorKit hat mit getText() den eingegebenen Text auslesen, aber OHNE das Html-Gerüst.


----------



## André Uhres (19. Jan 2006)

che hat gesagt.:
			
		

> Jetzt check ich das, ist leider nicht das was ich brauche.
> Wie schon erwähnt: Ich möchte aus einem JEditorPane, der einen HTMLEditorKit hat
> mit getText() den eingegebenen Text auslesen, aber OHNE das Html-Gerüst.


Mein Beispiel ist doch auch ein JEditorPane, der einen HTMLEditorKit hat 
und wo ich (zwar nicht mit getText()) den eingegebenen Text auslese, OHNE das Html-Gerüst  ???:L


----------



## Sky (19. Jan 2006)

Beschäftige Dich mal mit dem Thema Document:


```
JEditorPane pane = new JEditorPane ();
    pane.setContentType("text/html");
    pane.setText("abc");

    System.out.println(pane.getText()); // liefert "<html> ...."

    try {
      System.out.println( pane.getDocument().getText( 0, pane.getDocument().getLength() ) ); // liefert "abc"
    } catch( BadLocationException ex ) {
      ex.printStackTrace();
    }
```


----------



## Guest (19. Jan 2006)

It´s amazing. Thanks. Es funktioniert wunderbar. Die Klasse Document war mir bis zum heutigen Tag unbekannt...


----------



## André Uhres (19. Jan 2006)

Komisch, bei mir funktioniert das nicht, kein einziges Eingabefeld wird ausgelesen ???:L


----------



## che (20. Jan 2006)

```
pane.getDocument().getText( 0, pane.getDocument().getLength()
```

Damit sollte es eigentlich funktionieren, obwohl ich bis heute nicht weiß wie das intern funktioniert. Was benutzt du für eine Komponente ?


----------



## André Uhres (20. Jan 2006)

Mein Code ist oben im zweiten Post (Html_Form.java).
PS: so wie der Code dort ist, funktioniert er. Aber mit getText() bekomme ich keinen der Werte aus den Eingabefeldern


----------



## André Uhres (20. Jan 2006)

Naja, das Thema ist ja jetzt abgehakt. Ich muss wohl woanders suchen...

EDIT: Hier ist eine Alternative für INPUT Felder. Funzt leider nicht für SELECT und TEXTAREA:

```
HTMLDocument doc = (HTMLDocument) editorPane.getDocument();
        ElementIterator it = new ElementIterator(doc);
        Element element;
        while ( (element = it.next()) != null ) {
            String el = element.getName();
            if (el.equals( HTML.Tag.INPUT.toString() )
//                    || el.equals( HTML.Tag.SELECT.toString() )
//                    || el.equals( HTML.Tag.TEXTAREA.toString() )
                    ) {
                AttributeSet as = element.getAttributes();
                Object value = as.getAttribute(HTML.Attribute.VALUE);
                if(value != null){
                    System.out.print(as.getAttribute(HTML.Attribute.NAME)+": ");
                    System.out.println(value);
                }
        }
```


----------

