我需要开发一个可以" color"与JAVA编辑器一样,XML中的变量/值/标记也是如此。
我使用了eclipse的默认XML编辑器,目前我可以使用以下代码在所选单词上添加灰色背景:
for (Point p : offsets){
TextPresentation t = new TextPresentation();
t.replaceStyleRange(new StyleRange( (int)p.getX(),
(int)(p.getY() - p.getX()),
null,
Color.win32_new(null, 0xDDDDDD)));
fText.changeTextPresentation(t, true);
}
我的问题是,如果用户试图选择另一个变量/标签/值,我无法恢复默认样式。在失去焦点后,文本不会设置其自然色彩。目前,我使用硬编码的RGB值来设置默认颜色,但它只是"工作"如果用户保留了Eclipse默认主题(白色主题)。
有没有办法要求文档进行完整的语法着色重新验证?
感谢阅读。
答案 0 :(得分:0)
我自己找到了答案。 这是:
在更改选择样式之前,应首先保存当前样式。使用类似的结构:
private ArrayList<Point> offsets = new ArrayList<Point>();
private ArrayList<Color> foregroundgColor = new ArrayList<Color>();
然后在循环语句中将所有出现的样式/偏移量放在此结构中:
offsets.add(new Point(i,j));
fgColor.add(fText.getTextWidget().getStyleRangeAtOffset(i).foreground);
您现在可以应用“突出显示”(出现时的灰色背景):
for (Point p : offsets){
TextPresentation t = new TextPresentation();
t.replaceStyleRange(new StyleRange( (int)p.getX(),
(int)(p.getY() - p.getX()),
null,
Color.win32_new(null, 0xDDDDDD)));
fText.changeTextPresentation(t, true);
}
最后,当选定的出现失去焦点时,您将恢复默认样式:
for (int i = 0; i < offsets.size(); i++){
Point p = offsets.get(i);
TextPresentation t = new TextPresentation();
t.replaceStyleRange(new StyleRange( (int)p.getX(),
(int)(p.getY() - p.getX()),
fgColor.get(i),
null));
fText.changeTextPresentation(t, true);
}
offsets.clear();
fgColor.clear();