2011-04-02 97 views
1

我正在编写一个语法突出显示的编辑器。我想要做的是获取当前行,然后解析它而不是整个文档。问题是我可能做错了,但我不知道为什么。 下面是我在做什么:在JTextPane中逐行阅读文本

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的understaing是我能得到的只是我想行(孩子),比工作之上,但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

+0

“错”是什么意思?您是否考虑过可能会打包的行,即“行”可能会覆盖文本面板中的多个“行”?您能否清楚说明您对代码的期望? – Howard 2011-04-02 09:46:57

+0

它如何失败? – sarnold 2011-04-02 09:50:10

+0

我编辑我的问题 – dierre 2011-04-02 10:04:29

回答

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分隔符。

+0

就像一个魅力,男人。谢谢! – dierre 2011-04-02 10:11:21