2017-02-27 5 views
0

私はDefaultStyledDocumentに追加した4つの段落を抜き出しています。しかし、それは私が期待するように行動していない。Swing DefaultStyledDocument traversal

私は間違っていますか?私はここに完全なコードを追加しました - それが要求されたものでした。

import javax.swing.*; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DefaultStyledDocument; 
import javax.swing.text.Element; 

public class MainFrame extends JFrame { 

JTextPane jTextPane = new JTextPane(); 

public static void main(String[] args) { 
    new MainFrame().init(); 
    try { 
     Thread.sleep(95000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

private void init() { 
    JFrame frame = new JFrame(); 
    frame.setSize(1000, 800); 
    frame.setVisible(true); 

    jTextPane.setSize(995, 795); 
    frame.add(jTextPane); 

    DefaultStyledDocument document = new DefaultStyledDocument(); 

    try { 
     document.insertString(document.getLength(), "DDDD\n", null); 
     document.insertString(document.getLength(), "CCCC\n", null); 
     document.insertString(document.getLength(), "BBBB\n", null); 
     document.insertString(document.getLength(), "AAAA\n", null); 
    } catch (BadLocationException e) { 
     e.printStackTrace(); 
    } 

    document.dump(System.out); 
    jTextPane.setDocument(document); 

    for (int x = 0; x < 20; x += 5) { 
     Element paraGE = document.getParagraphElement(x); 
     int startOff = paraGE.getStartOffset(); 
     int endOff = paraGE.getEndOffset(); 
     String s = null; 
     try { 
      s = document.getText(startOff, endOff); 
     } catch (BadLocationException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(s); 
    } 
} 
} 

javax.swing.text.BadLocationException: Invalid location 
at javax.swing.text.GapContent.getChars(GapContent.java:189) 
at javax.swing.text.GapContent.getString(GapContent.java:167) 
at javax.swing.text.AbstractDocument.getText(AbstractDocument.java:770) 
at blah.MainFrame.init(MainFrame.java:60) 
at blah.MainFrame.main(MainFrame.java:14) 
javax.swing.text.BadLocationException: Invalid location 
at javax.swing.text.GapContent.getChars(GapContent.java:189) 
at javax.swing.text.GapContent.getString(GapContent.java:167) 
at javax.swing.text.AbstractDocument.getText(AbstractDocument.java:770) 
at blah.MainFrame.init(MainFrame.java:60) 
at blah.MainFrame.main(MainFrame.java:14) 
null 
null 
+0

未テストコードは次のようなものかもしれません。また、あなたのコードのどの行が例外を引き起こした行なのかを説明してください。 – VGR

+0

私はあなたがここで習得しようとしていると思っているように、_notは動作しないと定義するべきですか? – Nicolas

答えて

2

物事のカップル:

  1. あなたのためのループ内の変数は意味をなさない。一度に1行のテキストを読みたいので、各行のサイズを事前に知る必要はありません。 getText(...)方法について

  2. パラメータは、あなたがテキストの行を取得するにはDocumentからElementクラスを使用することができます

間違っています。あなたが例外のスタックトレースの残りの部分を残し現れる

Element root = textPane.getDocument().getDefaultRootElement(); 
int lines = root.getElementCount(); 

for (int i = 0; i < lines; i++) 
{ 
    Element line = root.getElement(i); 
    int start = line.getStartOffset(); 
    int end = line.getEndOffset(); 
    String text = document.getText(start, end - start); 
    System.out.println(text); 
} 
+0

編集され、正しいものが与えられました。 –

+0

@wax_lyricalこれが役に立ちましたら、チェックマークをクリックして回答を「受け入れる」ことを忘れないでください。そうすれば、人々は問題が解決されたことを知ることができます。 – camickr

+0

これは確かに助けになりましたが、ドキュメントやEditorKitsのドキュメントをもっと使うことができます。ありがとう –