在自定义 Eclipse 视图中绘制
Draw inside custom Eclipse View
我使用 this 教程为我的 Eclipse 插件创建了自定义视图。现在我想在该视图中绘制一些东西。出于测试目的,它应该只是一些行(例如):
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.part.ViewPart;
public class PlotterView extends ViewPart {
@Override
public void setFocus() {
}
@Override
public void createPartControl(Composite parent) {
Shell activeShell = parent.getDisplay().getActiveShell();
GC gc = new GC(activeShell);
gc.drawLine(0, 0, 100, 100);
gc.drawLine(100, 0, 0, 100);
}
}
我也试过用:
Display display = Display.getCurrent();
Shell activeShell = display.getActiveShell();
很遗憾,没有线条可见。是否可以在自定义视图中绘制自定义形状?我该如何实现?
活动的 shell 覆盖了整个 Eclipse,因此这不是一个适合使用的控件。
而是将 Canvas
对象添加到您的视图中并在 PaintListener
:
中绘制
@Override
public void createPartControl(Composite parent) {
Canvas canvas = new Canvas(parent, SWT.NONE);
canvas.addPaintListener(new PaintListener()
{
@Override
public void paintControl(final PaintEvent event)
{
GC gc = event.gc;
gc.drawLine(0, 0, 100, 100);
gc.drawLine(100, 0, 0, 100);
}
});
我使用 this 教程为我的 Eclipse 插件创建了自定义视图。现在我想在该视图中绘制一些东西。出于测试目的,它应该只是一些行(例如):
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.part.ViewPart;
public class PlotterView extends ViewPart {
@Override
public void setFocus() {
}
@Override
public void createPartControl(Composite parent) {
Shell activeShell = parent.getDisplay().getActiveShell();
GC gc = new GC(activeShell);
gc.drawLine(0, 0, 100, 100);
gc.drawLine(100, 0, 0, 100);
}
}
我也试过用:
Display display = Display.getCurrent();
Shell activeShell = display.getActiveShell();
很遗憾,没有线条可见。是否可以在自定义视图中绘制自定义形状?我该如何实现?
活动的 shell 覆盖了整个 Eclipse,因此这不是一个适合使用的控件。
而是将 Canvas
对象添加到您的视图中并在 PaintListener
:
@Override
public void createPartControl(Composite parent) {
Canvas canvas = new Canvas(parent, SWT.NONE);
canvas.addPaintListener(new PaintListener()
{
@Override
public void paintControl(final PaintEvent event)
{
GC gc = event.gc;
gc.drawLine(0, 0, 100, 100);
gc.drawLine(100, 0, 0, 100);
}
});