首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing DefaultStyledDocument遍历

Swing DefaultStyledDocument遍历
EN

Stack Overflow用户
提问于 2017-02-27 15:54:31
回答 1查看 415关注 0票数 0

我正在尝试提取我添加到一个DefaultStyledDocument中的四个段落。但这不是我所期望的那样。

我做错了什么?我在这里添加了完整的代码--因为这是所要求的。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 16:04:38

几件事:

  1. for循环中的变量没有意义。你想一次读一行文字,但你事先不知道每一行的大小。
  2. getText(...)方法的参数是错误的

您可以使用Element类从Document获取行文本。

未经测试的代码可能如下所示:

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42490111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档