Java:StyledText显示行号

来自WHY42

给Swt的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);
            }
        });
 text.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent event) {
                int maxLine = text.getLineCount();
                int lineCountWidth = Math.max(String.valueOf(maxLine).length(), 3);

                StyleRange style = new StyleRange();
                style.background = Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
                style.metrics = new GlyphMetrics(0, 0, lineCountWidth * 8 + 5);
                Bullet bullet = new Bullet(ST.BULLET_NUMBER, style);
                text.setLineBullet(0, text.getLineCount(), null);
                text.setLineBullet(0, text.getLineCount(), bullet);
            }
        });