Esta es mi implementación de trabajo.
styledText.addLineStyleListener(new LineStyleListener() {
@Override
public void lineGetStyle(LineStyleEvent event) {
// Using ST.BULLET_NUMBER sometimes results in weird alignment.
//event.bulletIndex = styledText.getLineAtOffset(event.lineOffset);
StyleRange styleRange = new StyleRange();
styleRange.foreground = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
int maxLine = styledText.getLineCount();
int bulletLength = Integer.toString(maxLine).length();
// Width of number character is half the height in monospaced font, add 1 character width for right padding.
int bulletWidth = (bulletLength + 1) * styledText.getLineHeight()/2;
styleRange.metrics = new GlyphMetrics(0, 0, bulletWidth);
event.bullet = new Bullet(ST.BULLET_TEXT, styleRange);
// getLineAtOffset() returns a zero-based line index.
int bulletLine = styledText.getLineAtOffset(event.lineOffset) + 1;
event.bullet.text = String.format("%" + bulletLength + "s", bulletLine);
}
});
styledText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
// For line number redrawing.
styledText.redraw();
}
});
Tenga en cuenta que la posible sobrecarga de resaltado de sintaxis nuevo cálculo cuando se llama a volver a dibujar() es probable que sea aceptable, porque lineGetStyle() sólo se les llama con líneas actualmente en pantalla.
No hay una verdadera manera directa hasta donde yo sé; siempre puedes poner un cuadro de texto no editable a la izquierda de tu editor de texto. – purtip31
Comprueba la implementación que están usando los chicos de Eclipse. –
@ Adam Están usando un 'SourceViewer' como se muestra [aquí] (http://www.dsource.org/projects/dwt/wiki/JFaceTextExample). Intenté este ejemplo, pero de alguna manera no pude hacerlo funcionar correctamente. Estaba haciendo cosas extrañas en tiempo de ejecución. De todos modos, me gustaría mantener mi 'StyleText' :) – kon