JEditPane: como descobrir a posição do cursor?

Recentemente me deparei com o seguinte problema: ao desenvolver uma DSL usando Groovy, me vi na necessidade de verificar em qual linha do meu código erros eram encontrados ao serem executados pelo interpretador.

O script em questão era digitado em um componente do tipo JEditorPane. Em um primeiro pensei: “moleza!”, no entanto, não há um método pronto para que você obtenha o número da linha aonde o seu cursor se encontra (!!!). Caso você se depare com este problema, o snippet abaixo lhe salvará algum tempo de pesquisa na internet:


//txtScript consiste na minha instância de javax.swing.JEditorPane
txtScript.addCaretListener(

/*

Neste caso, criei uma nova instância de CaretListener para que um componente do tipo JLabel seja atualizado sempre que o usuário movimentar o cursor dentro do componente

*/

new CaretListener() {

public void caretUpdate(CaretEvent e) {

int row = txtScript.getDocument().getRootElements()[0].getElementIndex(txtScript.getCaretPosition());

int coluna = txtScript.getCaretPosition() - txtScript.getDocument().getRootElements()[0].getElement(row).getStartOffset();

lblPosicaoCaractere.setText("Linha: " + (row + 1) + ", Coluna:" + (coluna + 1));

}

}

);

Tosco mas funciona :)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.