我想知道是否有一种直接的方法来使用StyledText文本字段显示行号-即使行是换行的。我正在我的应用程序中使用它,如果内容变得很大,一些行号会更好。
谢谢。
发布于 2012-07-20 05:18:38
关键是org.eclipse.swt.custom.Bullet.它基本上是一个符号(在我们的例子中是一个数字),您可以将其添加到一行的开头。
//text is your StyledText
text.addLineStyleListener(new LineStyleListener()
{
public void lineGetStyle(LineStyleEvent e)
{
//Set the line number
e.bulletIndex = text.getLineAtOffset(e.lineOffset);
//Set the style, 12 pixles wide for each digit
StyleRange style = new StyleRange();
style.metrics = new GlyphMetrics(0, 0, Integer.toString(text.getLineCount()+1).length()*12);
//Create and set the bullet
e.bullet = new Bullet(ST.BULLET_NUMBER,style);
}
});发布于 2015-04-24 21:50:28
这是我的工作实现。
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();
}
});请注意,在调用redraw()时,语法突出显示重新计算的开销可能是可以接受的,因为lineGetStyle()只在当前显示在屏幕上的行中调用。
发布于 2012-07-06 02:06:09
我相信使用LineStyleListener应该行得通。大致是这样的:
styledText.addLineStyleListener(
new LineStyleListener() {
@Override
public void lineGetStyle(LineStyleEvent event) {
String line = event.lineText;
int lineNumber = event.lineOffset;
// Do stuff to add line numbers
}
}
);https://stackoverflow.com/questions/11057442
复制相似问题