1

我正在编写一个带有语法突出显示的编辑器。我想要做的是获取当前行并解析它而不是整个文档。问题是我可能做错了,但我不知道为什么。这就是我正在做的事情:

public void keyReleased(KeyEvent e) {
    System.out.println(e);
    try {
    int inizio = Utilities.getRowStart(ta, ta.getCaretPosition());
    int fine = Utilities.getRowEnd(ta, ta.getCaretPosition());
    System.out.println("Inizio: " + inizio + " - Fine: " + fine);
    Element root = ta.getDocument().getDefaultRootElement();
    if(inizio == fine) System.out.println("Mi trovo ad inizio riga");
    else {
        int linea = RXTextUtilities.getLineAtCaret(ta);
        System.out.println("Linea: " + linea);
        Element child = root.getElement(linea-1);
        System.out.println("Testo corrente: " + child.getDocument().getLength() );
    }
    } catch (BadLocationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

我对使用的理解javax.swing.text.Element是,我可以得到我想要的行(孩子),而不是继续工作,但child.getDocument.getLength()给了我整个文档的长度。我究竟做错了什么?

编辑#1:

child.getDocument.getLength()给我文档开头的长度,我希望当前行长度。请参阅:我得到了我的行号,int linea = RXTextUtilities.getLineAtCaret(ta);而不是使用 root.getElement(linea-1) 提取行,所以我希望这child.getDocument().getLength()会给我当前行的长度。

RXTextUtilities 链接: http: //www.camick.com/java/source/RXTextUtilities.java

4

1 回答 1

2

对于您的特定情况,您将获得整个文档的长度,因为child.getDocument()实际上返回了嵌入孩子的文档。

您可以使用child.getStartOffset()child.getEndOffset()确定文档中的开始和结束,然后从整个文档中剪切文本。

int start = child.getStartOffset();
int end = child.getEndOffset();
int length = end - start;
String text = child.getDocument().getText(start, length);

请注意,文本还包含 EOL 分隔符。

于 2011-04-02T09:58:27.767 回答