StyledDocument Zeilen auslesen

Crai

Mitglied
Hallo,
wie kann ich aus einem JTextPane über ein StyledDocument die Zeilen auslesen?
Gehts das mit getParagraphElements(Offset) ?
Wenn ja, Rückgabewert dieser Methode ist ja Element, wie bekomm ich dann die darin enthaltenen Zeichen um sie zB. mit nem String vergleichen zu können?

Vielen Dank für jede Hilfe!

CU
Crai
 
Hallo!

In etwa so:

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Element;
import javax.swing.text.StyledDocument;

public class EditorTest extends JFrame {

   private JTextPane textPane;

   private JScrollPane scrollPane;

   private JButton btnAction;

   private StyledDocument doc;

   public EditorTest() {
      super("EditorTest");
      setDefaultCloseOperation(EXIT_ON_CLOSE);

      doc = new DefaultStyledDocument();
      textPane = new JTextPane(doc);

      scrollPane = new JScrollPane(textPane);

      btnAction = new JButton("Action");
      btnAction.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            Element[] elements = doc.getRootElements();
            try {
               for (int i = 0; i < elements.length; i++) {
                  int start = elements[i].getStartOffset();
                  int end = elements[i].getEndOffset();
                  System.out.println(doc.getText(start, end - start));
               }
            } catch (BadLocationException e1) {
               e1.printStackTrace();
            }
         }
      });

      getContentPane().add(scrollPane, BorderLayout.CENTER);
      getContentPane().add(btnAction, BorderLayout.SOUTH);

      pack();
      setVisible(true);
   }

   public static void main(String[] args) {
      new EditorTest();
   }
}

Gruß Tom
 
Vielen Dank für deine Antwort! Du hast mir damit sehr geholfen! :)
Echt super!
Wobei ich dich aber noch fragen wollte, ob dein Code nicht eher den ganzen Text, der zum einem in der "Section"Root enthalten is und dann nochmal den der in der BIDIRoot steht?!

Mittlerweile bin ich aber in der Lösung meiner Aufagbenstellung noch nicht wirklich voran gekommen.
Es sollen nämlich an bestimmten Zeilen Numerierungen eingefügt werden(z.b. für best.Textpassagen ), das Problem ist aber, dass ich wenn ich den Text in einen String lade, die Attribute irgendwohin speichern muss, um sie später wieder einfügen zu können.
Im Klartext:
Text komm in einen String rein, dessen Zeichenattribute muss ich irgendwo mir merken und dann wird der String verändert.
Danach wird der alte Text durch den neuen in der TextPane, inklusive seiner Zeichenattribute, ersetzt.
Das muss deswegen in einem Schritt geschehen, dass es dem User möglich is mit einem Undo wieder alles rückgängig zumachen....
Ich hoffe ich konnte mich verständlich ausdrücken,...,bin nie gut darin.

Um das zu lösen hab ich mich schon an AttributedString und dergleichen versucht, dabei komm ich aber mit dem AttributedStringCharacterIterator und dessen Anwendung nicht klar, geschweige denn mit dieser Map, die ein Konstruktor davon braucht.
Hoffe jemand weiß rat,
jedem noch ein schönes WE,

CU
Crai
 
Zurück