2009-11-06 43 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的非常內部的東西,既沒有記錄也沒有真正的可擴展性。

祝你好運:)