JTextPane mit StyleDocument

JavaSugar

Grünschnabel
Hallo,

ich habe bis jetzt ab und zu diverse Beiträge-Foren angeschaut, um einige Lösungen für meine Java-Probleme einzusetzen. Du scheinst, dich mit java-Problemen gut auszukennen. Daher möchte mich mich an dich wenden und fragen, weshalb ein real primitiver kurzer Java-Code, der folgendes beschrieben wird, nicht ganz funtkioniert:

...
// Test-Datei enhält ein kurzes Text-Beispiel zum Testen
File file = new File("files/text/Test.htm");

JTextPane pane = new JTextPane();
pane.setPage(file.toURL());
pane.setEditable(false);

StyledDocument doc = pane.getStyledDocument();

String strText = doc.getText(0, doc.getLength());

// Stelle suchen
int iIndex = sText.indexOf("irgendetwas");

// gefundenen String im Text markieren
if (iIndex > -1){
System.out.println("Gefunden");
}
...

Mein Ziel ist, nur den Inhalt ohne HTML-Tags zu kriegen. Beim Programmstart wird aber kein gefüllter String-Text durch die getText-Methode der StyledDocument-Klasse zurückgegeben, also nur Leere. Wenn man diesen Code mit Hilfe Debugger schrittweise geht, wird der String-Text wirklich zurückgegeben, dass irgendetwas im Text gefunden wird. Wieso klappt es aber ohne Debugger nicht:confused:

Wäre dir für deine Lösung/Idee dankbar!!

Greetings

JavaSugar
 
Zuletzt bearbeitet:
Probier mal nen insertString vor dem getText.

Ist zwar nur ein Workaround aber woran es sonst liegen kann fiel mir auf die schnell auch nicht auf:
Java:
// Test-Datei enhält ein kurzes Text-Beispiel zum Testen
File file = new File("files/text/Test.htm");

JTextPane pane = new JTextPane();
pane.setPage(file.toURL());
pane.setEditable(false);

StyledDocument doc = pane.getStyledDocument();
doc.insertString(0, "", null);

String strText = doc.getText(0, doc.getLength());

// Stelle suchen
int iIndex = sText.indexOf("irgendetwas");

// gefundenen String im Text markieren
if (iIndex > -1){
   System.out.println("Gefunden");
}
 
Hi Zeja,

die gleiche Idee hatte ich auch schon mal. Es klappte aber auch nix :(
Es müsste irgendwie funktionieren! Ich glaube, es liegt daran, dass die Transformierung des aus der Datei gelesenen HTML-Codes zur formatierten Ausgabe mittels von JEditorPane (oder JTextPane) etwas Zeit in Anspruch nimmt, so dass in diesem Programmlauf die getText-Methode keine Chance hat, ein Suchziel aufzufinden. Also "übersprungen". Nur mit Debugger geht das! Muss halt den Code zerreißen und weiter gucken.

Greetings JavaSugar
 
Also bei mir funktioniert es so, es ist auch eine längere HTML Datei.

Java:
import java.io.File;

import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.WindowConstants;
import javax.swing.text.StyledDocument;


/**
 * @author zeja
 */
public class PaneTest {

  public static void main(String[] args) {
    try {
//       Test-Datei enhält ein kurzes Text-Beispiel zum Testen
      File file = new File("E://Korbball.htm");
      
      JFrame frame = new JFrame();
      frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      
      JTextPane pane = new JTextPane( );
      pane.setPage(file.toURL( ));
      pane.setEditable(false);
      frame.add(pane);
      
      frame.pack();
      frame.setVisible(true);

      StyledDocument doc = pane.getStyledDocument( );
      doc.insertString(0, "", null);
      
      int length = doc.getLength( );
      String strText = doc.getText(0, length);
      
      System.out.println(length);
      
      //Stelle suchen
      int iIndex = strText.indexOf("Korbball");

      // gefundenen String im Text markieren
      if (iIndex > -1) {
        System.out.println("Gefunden");
      }
    }
    catch (Exception e) {
      e.printStackTrace( );
    }
  }
}
 
Hi Zeja,

aber es klappt nicht ganz, wenn der von dir vorgeschlagene Code jedes Mal gestartet wird, als gäbe es mehrere HTML-Dateien, die durchsucht entsprechend eines Suchbegriffs werden sollen. Da wird ein Result für die Textlänge 0 manchmal zurückgegeben!

Übrigens stelle ich fest, dass kein String-Text durch die getText(...)-Methode zurückgegeben werden kann, wenn eine HTML-Datei mit der Textformatierung (zusätzliche Tags z.b. <font> <b> <space> etc.) zugegriffen wird und in ein instanziertes JEditorPane-Objekt (oder JTextPane-Objekt) gesetzt wird. Nur klappt es problemlos, wenn ein einfacher Text *.txt eingesetzt wird, d.h. überhaupt keine besondere Formatierung. Weiß nex warum. Sollte es so gehen, müsste ich alle Texte in zwei Bereiche unterteilen, d.h. formatierte Texte nur für die Anzeige und nicht formatierte Texte (überwiegend Inhalte) für die Textsuche entsprechend eines Suchbegriffs. Bei Sucherfolg werden einige formatierte HTML-Texte zur Anzeige gesammelt. Oder hast du eine andere Idee?

Greetings

JavaSugar
 
Zuletzt bearbeitet:
Zurück