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 :)