2009-11-06 46 views
2

我想绘制一些形状(boxed ans arrow),即“over”在eclipse编辑器中的文本。要开始,我写了下面的代码:绘制到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中像文本编辑器一样在控件中绘制一条线?

回答

1

您遇到的问题是您正在获取Shell,而不是编辑器的实际组件。 Shell是显示Eclipse的整个窗口。

我认为唯一的解决方案是创建自己的编辑器实现,然后在createPartControl()方法中,您可以创建一个文本区域,然后添加画笔侦听器。

可以开始使用:

http://www.realsolve.co.uk/site/tech/jface-text.php

,然后看着AbstractTextEditor的源代码,你可以找到你想要画的“真正的” SWT组件。您需要重写创建UI组件的方法,复制原始代码并添加自定义绘画。

1

我不知道,如果它的工作原理,但你需要扩展文本编辑:

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

祝你好运:)