【问题标题】:Drawing into an Eclipse editor在 Eclipse 编辑器中绘图
【发布时间】:2010-12-14 00:05:32
【问题描述】:

我正在尝试在 Eclipse 编辑器中绘制一些形状(盒装箭头),即“覆盖”文本。首先,我编写了以下代码:

IWorkbenchPage activePage = Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); 最终壳 shell2 = activePage.getActiveEditor().getSite().getShell(); shell2.addPaintListener(new PaintListener(){ 公共无效paintControl(PaintEvent e){ 矩形客户端区域 = shell2.getClientArea(); 例如gc.drawLine(0,0,clientArea.width,clientArea.height); } });

这段代码的问题是双重的:(1) 这条线不是跨越编辑器而是跨越整个工作台,即 Eclipse 窗口,以及 (2) 这条线是在 (!) 所有其他控件(如工具栏)后面绘制的和编辑。这会导致线条几乎不可见:它只显示在其他控件之间的某些像素处。

如何在 Eclipse 中的文本编辑器等控件上画一条线?

【问题讨论】:

    标签: eclipse drawing swt


    【解决方案1】:

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

    我认为唯一的解决方案是创建自己的 Editor 实现,然后在 createPartControl() 方法中创建一个文本区域,然后向其中添加绘制侦听器。

    您可以开始:

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

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

    【讨论】:

      【解决方案2】:

      我不确定它是否有效,但您需要扩展 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 的非常内部的东西,既没有文档记录也没有真正可扩展。

      祝你好运:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 2010-11-12
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多