我目前正在开发一个Eclipse插件,该插件可以为代码行以及花括号等着色。
我让一切动态地进行工作,即如果代码被更改,则线条颜色也会相应地更新。
但是,一旦线条着色,经过一秒钟的回合,它就会“重置”并去除所有颜色。
这是事件侦听器,用于检查用户的源代码是否已被修改。
private void textModifiedListener() {
for (IEditorPart editorPart : getCurrentEditorParts()) {
editorText = editorPart.getAdapter(Control.class);
if (editorText instanceof StyledText) {
styledText = (StyledText) editorText;
styledText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent event) {
//Source Code Modified.
Colour();
}
});
}
}
}
然后我像这样给单个字符上色:
public void ColourCharacter(ColourObject colourOject, int characterIndex) {
/* Given the colour and the character index, colour the given brace. */
if (isColouringEnabled) {
System.out.println("[ColourCode]:\tColourCharacter.");
style = new StyleRange();
style.start = characterIndex;
style.length = 1;
style.background = new Color(Display.getCurrent(), colourOject.getRed(), colourOject.getGreen(), colourOject.getBlue());
if (editorText instanceof StyledText) {
styledText.setStyleRange(style);
}
}
}
这些方法用于获取IEditorParts。
/* Obtain the current workbench window. */
public synchronized static IWorkbenchWindow getActiveWorkbenchWindow() {
return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
}
/* Obtain the current editor reference. */
public synchronized static IEditorReference[] getCurrentEditorReferences() {
return getActiveWorkbenchWindow().getActivePage().getEditorReferences();
}
/* Obtain the current editor parts. */
public synchronized List<IEditorPart> getCurrentEditorParts() {
List<IEditorPart> editorParts = new ArrayList<IEditorPart>();
for (IEditorReference editorReference : getCurrentEditorReferences()) {
IEditorPart editor = editorReference.getEditor(true);
if (editor != null) {
editorParts.add(editor);
}
}
return editorParts;
}
我已经整天呆在这个问题上了。任何帮助将不胜感激。
最佳答案
现有的大多数编辑器都有自己的样式来管理他们要管理的文本。这通常使用JFace SourceViewerConfiguration
,Reconciler
,PresentationReconciler
,IPresentationDamager
,IPresentationRepairer
类。
您不能只是尝试覆盖这样的样式。编辑器完全控制文本的样式,将忽略您所做的任何更改。例如,Reconciler
在后台运行,每半秒更新一次。
您必须查看特定的编辑器,并查看它提供了哪些功能来添加到其样式系统中。
如果您只想标记错误和警告,则可以使用IMarker
界面。