绘制Eclipse编辑器

时间:2009-11-06 20:50:42

标签: eclipse drawing swt

我试图在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中的文本编辑器中像控件一样绘制一条线?

2 个答案:

答案 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的非常内部的东西,既没有记录也没有真正可扩展。

祝你好运:)