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 に答える