Questa è la mia implementazione operativa.
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();
}
});
noti che l'eventuale sovraccarico di evidenziazione della sintassi ricalcolo quando chiama draw() è probabile che sia accettabile, perché lineGetStyle() sono chiamati solo con linee attualmente sullo schermo.
fonte
2015-04-24 13:50:27
Non c'è un vero e semplice modo per quanto ne so; puoi sempre inserire una casella di testo non modificabile a sinistra dell'editor di testo. – purtip31
Verifica l'implementazione che i ragazzi di Eclipse stanno utilizzando. –
@Adam Stanno usando un 'SourceViewer' come mostrato [qui] (http://www.dsource.org/projects/dwt/wiki/JFaceTextExample). Ho provato questo esempio, ma in qualche modo non ero in grado di farlo funzionare correttamente. Stava facendo cose strane su runtime. Ad ogni modo, vorrei mantenere il mio 'StyleText' :) – kon