Đây là triển khai hoạt động của tôi.
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();
}
});
Lưu ý rằng các chi phí có thể có của cú pháp làm nổi bật tính toán lại khi gọi vẽ lại() có khả năng là có thể chấp nhận, bởi vì lineGetStyle() chỉ được gọi với dòng hiện trên màn hình.
Nguồn
2015-04-24 13:50:27
Không có cách nào thực sự đơn giản theo như tôi biết; bạn luôn có thể đặt một hộp văn bản không thể chỉnh sửa ở bên trái trình soạn thảo văn bản của bạn. – purtip31
Kiểm tra cài đặt mà các chuyên gia Eclipse đang sử dụng. –
@Adam Họ đang sử dụng 'SourceViewer' như được hiển thị [ở đây] (http://www.dsource.org/projects/dwt/wiki/JFaceTextExample). Tôi đã thử ví dụ này, nhưng bằng cách nào đó tôi đã không thể làm cho nó chạy đúng cách. Nó đang làm những thứ kỳ lạ trong thời gian chạy. Dù sao, tôi muốn giữ 'StyleText' của tôi :) – kon