回答
的關鍵是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);
}
});
它很好。如果總行數從9增加到10,它只是錯過重畫所有行。或者如果在文件中間刪除行。謝謝。 – kon
我相信使用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
}
}
);
你能否提一下你的方法的更多細節?在網絡上,我剛剛發現了一些使用'LineStyleListener'的例子,以某種方式突出顯示了一行的內容,例如, [這個例子](http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/TurnsecharactersredusingaLineStyleListener.htm)。謝謝。 – kon
這是使用的子彈的方式,更新的數字,當內容發生變化:
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.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);
}
});
作爲一個側面說明用於着色行號:
Device device = Display.getCurrent();
style.background = new Color(device, LINE_NUMBER_BG);
style.foreground = new Color(device, LINE_NUMBER_FG);
其中LINE_NUMBER_BG
和LINE_NUMBER_FG
可能是RGB對象,例如:
final RGB LINE_NUMBER_BG = new RBG(160, 80, 0); // brown
final RGB LINE_NUMBER_FG = new RGB(255, 255, 255); // white
這是我的工作實現。
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();
}
});
注意語法的可能開銷突出重新計算調用重繪()時,很可能是可以接受的,因爲lineGetStyle()只與當前在屏幕上線叫。
- 1. Java SWT StyledText,更改起始行號
- 2. SWT StyledText getCaretOffset給出錯誤的行號
- 3. SWT列表顯示行號
- 4. 如何在SWT中顯示提示消息StyledText
- 5. 如何在SWT styledtext中顯示完整的數組內容?
- 6. 如何強制StyledText打破行SWT
- 7. 如何在SWT中顯示行號表
- 8. 以Java Swt顯示圖像?
- 9. 如何自動滾動StyledText(SWT)
- 10. 在SWT應用程序中使用styledText
- 11. SWT StyledText - 聽客戶端區域更改
- 12. SWT從StyledText中刪除所有聽衆
- 13. SWT StyledText部件 - 空白符繪畫
- 14. Eclipse編輯器 - SWT StyledText CaretListener偏移量不對應於真實文件行號
- 15. SWT StyledText:下一行的位置插入前一行的製表符寬度
- 16. HTML風格的鏈接是否可以添加到SWT StyledText?
- 17. StyledText可見行數
- 18. 顯示行號
- 19. 顯示行號
- 20. 顯示行號
- 21. 高亮顯示SWT的MessageBox
- 22. 在SWT中滯後顯示
- 23. 在控制檯中顯示行號? Java
- 24. Eclipse SWT GUI - StyledText控制 - 每個字符的寬度相等
- 25. 將帶樣式範圍的SWT StyledText內容轉換爲圖像
- 26. SWT創建兩個串聯滾動的StyledText
- 27. SWT StyledText - 帶MeasureItem偵聽器的表跳轉到頂部
- 28. SWT:單顯示器與多顯示器
- 29. 如何使用SWT StyledText獲取CaretLocation文本
- 30. 獲取SWT StyledText小部件始終滾動到其結尾
據我所知,沒有真正簡單的方法;你總是可以在你的文本編輯器的左邊放置一個不可編輯的文本框。 – purtip31
檢查Eclipse傢伙正在使用的實現。 –
@Adam他們正在使用[SourceViewer],如[here](http://www.dsource.org/projects/dwt/wiki/JFaceTextExample)所示。我試過這個例子,但不知何故,我無法讓它正常運行。它在運行時正在做一些奇怪的事情。無論如何,我想保留我的'StyleText' :) – kon