Dies ist meine Arbeitsimplementierung.
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();
}
});
Beachten Sie, dass die mögliche Überkopfsyntaxhervorhebung, wenn die Neuberechnung neu zeichnen() aufgerufen wird wahrscheinlich akzeptabel, weil lineGetStyle() nur mit Linien zur Zeit auf dem Bildschirm aufgerufen.
Es gibt keinen wirklich direkten Weg, soweit ich weiß; Sie könnten immer ein nicht editierbares Textfeld links neben Ihrem Texteditor platzieren. – purtip31
Überprüfen Sie die Implementierung der Eclipse-Jungs. –
@Adam Sie verwenden einen 'SourceViewer' wie hier [hier] (http://www.dsource.org/projects/dwt/wiki/JFaceTextExample). Ich habe dieses Beispiel versucht, aber irgendwie konnte ich es nicht richtig laufen lassen. Es hat merkwürdige Sachen zur Laufzeit gemacht. Wie auch immer, ich würde gerne meinen 'StyleText' behalten :) – kon