2009-11-06 4 views
2

Я пытаюсь нарисовать некоторые фигуры (вставка стрелок ans) в, т. Е. Над текстом в редакторе затмения. Для начала, я написал следующий код:Рисование в редакторе 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

Проблема в том, что вы получаете оболочку, а не фактический компонент для редактора. Оболочка - это все окно, где отображается Eclipse.

Я думаю, что единственным решением является создание собственной реализации редактора, а затем в методе createPartControl() вы можете создать текстовую область, а затем добавить к ней прослушиватель красок.

Вы можете начать с:

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

И тогда, глядя на исходный код AbstractTextEditor, вы можете найти «реальный» SWT компонент, который вы хотите обратить. Вам нужно будет переопределить метод, который создает компоненты пользовательского интерфейса, скопировать исходный код и добавить пользовательскую картину.

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, чтобы работать с этими классами, поскольку это очень внутренние вещи от затмения, и ни документированы, ни действительно расширяемы.

Удачи вам в этом :)

Смежные вопросы