首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SWT显示StyledText的行号

Java SWT显示StyledText的行号
EN

Stack Overflow用户
提问于 2012-06-16 04:00:28
回答 5查看 4.6K关注 0票数 9

我想知道是否有一种直接的方法来使用StyledText文本字段显示行号-即使行是换行的。我正在我的应用程序中使用它,如果内容变得很大,一些行号会更好。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-20 05:18:38

关键是org.eclipse.swt.custom.Bullet.它基本上是一个符号(在我们的例子中是一个数字),您可以将其添加到一行的开头。

代码语言:javascript
复制
//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);
    }
});
票数 6
EN

Stack Overflow用户

发布于 2015-04-24 21:50:28

这是我的工作实现。

代码语言:javascript
复制
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()只在当前显示在屏幕上的行中调用。

票数 4
EN

Stack Overflow用户

发布于 2012-07-06 02:06:09

我相信使用LineStyleListener应该行得通。大致是这样的:

代码语言:javascript
复制
styledText.addLineStyleListener(
    new LineStyleListener() {
        @Override
        public void lineGetStyle(LineStyleEvent event) {
            String line = event.lineText;
            int lineNumber = event.lineOffset;
            // Do stuff to add line numbers
        }
    }
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11057442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档