我试图在eclipse编辑器中绘制一些形状(盒装和箭头),即“覆盖”文本。首先,我编写了以下代码:
IWorkbenchPage activePage = Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); final Shell shell2 = activePage.getActiveEditor().getSite().getShell(); shell2.addPaintListener(new PaintListener(){ public void paintControl(PaintEvent e){ Rectangle clientArea = shell2.getClientArea(); e.gc.drawLine(0,0,clientArea.width,clientArea.height); } });
这段代码的问题有两个:(1)该行不是在编辑器中绘制的,而是在整个工作台上绘制,即Eclipse窗口,以及(2)该行被绘制在(!)所有其他控件(如工具栏)后面和编辑。这会导致该线几乎不可见:它仅在其他控件之间的某些像素处显示。
如何在Eclipse中的文本编辑器中像控件一样绘制一条线?
答案 0 :(得分:1)
您遇到的问题是您获得了Shell,而不是编辑器的实际组件。 Shell是显示Eclipse的整个窗口。
我认为唯一的解决方案是创建自己的Editor实现,然后在createPartControl()方法中创建文本区域,然后将paint侦听器添加到其中。
您可以开始使用:
http://www.realsolve.co.uk/site/tech/jface-text.php
然后,查看AbstractTextEditor的源代码,您可以找到要绘制的“真实”SWT组件。您需要覆盖创建UI组件的方法,复制原始代码并添加自定义绘画。
答案 1 :(得分:1)
我不确定它是否有效,但你需要扩展TextEditor:
public class MyEditor extends TextEditor {
protected StyledText createTextWidget(Composite parent, int styles) {
StyledText widget = super.createTextWidget( parent, styles );
widget.addPaintListener( <yourPaintlistener> );
return widget;
}
}
这应该至少可以让你获得编辑器的基本文本绘图控件。尽管如此,这是一个使用这些类的PITA,因为它是来自eclipse的非常内部的东西,既没有记录也没有真正可扩展。
祝你好运:)