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