Eclipse canvas paintListener 从未调用过
Eclipse canvas paintListener never called
我正在为 eclipse 创建一个编辑器扩展,我需要为编辑器的一部分绘制简单的图形部分。据我了解,我应该能够为此使用 eclipse 小部件 Canvas。但是从未调用添加到 canvas 的 PaintListener 的 paintControl 方法。我假设我遗漏了一些关键的简单部分,但我找不到它。这是在 canvas.
上创建、添加和调用重绘的代码
void createGraphicPage() {
Composite composite = new Composite(getContainer(), SWT.NONE);
drawWidget = new Canvas(composite, SWT.NONE);
FormLayout layout = new FormLayout();
drawWidget.setLayout(layout);
drawWidget.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
System.out.println("inDrawWidget");
Rectangle r = drawWidget.getClientArea();
e.gc.drawOval(0, 0, r.width, r.height);
}
});
drawWidget.redraw();
int index = addPage(composite);
setPageText(index, "Graphics Editor");
}
你需要在每个包含控件的Composite
上设置布局,并且通常在控件上设置布局数据。所以:
Composite composite = new Composite(getContainer(), SWT.NONE);
composite.setLayout(new GridLayout());
Canvas drawWidget = new Canvas(composite, SWT.NONE);
drawWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
drawWidget.addPaintListener(new PaintListener() {
@Override
public void paintControl(final PaintEvent e) {
System.out.println("inDrawWidget");
final Rectangle r = drawWidget.getClientArea();
e.gc.drawOval(0, 0, r.width, r.height);
}
});
我在 Composite
中添加了 GridLayout
,在 Canvas
中添加了 GridData
布局数据。 GridData
使 Canvas
使用所有可用的 space。
我正在为 eclipse 创建一个编辑器扩展,我需要为编辑器的一部分绘制简单的图形部分。据我了解,我应该能够为此使用 eclipse 小部件 Canvas。但是从未调用添加到 canvas 的 PaintListener 的 paintControl 方法。我假设我遗漏了一些关键的简单部分,但我找不到它。这是在 canvas.
上创建、添加和调用重绘的代码void createGraphicPage() {
Composite composite = new Composite(getContainer(), SWT.NONE);
drawWidget = new Canvas(composite, SWT.NONE);
FormLayout layout = new FormLayout();
drawWidget.setLayout(layout);
drawWidget.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
System.out.println("inDrawWidget");
Rectangle r = drawWidget.getClientArea();
e.gc.drawOval(0, 0, r.width, r.height);
}
});
drawWidget.redraw();
int index = addPage(composite);
setPageText(index, "Graphics Editor");
}
你需要在每个包含控件的Composite
上设置布局,并且通常在控件上设置布局数据。所以:
Composite composite = new Composite(getContainer(), SWT.NONE);
composite.setLayout(new GridLayout());
Canvas drawWidget = new Canvas(composite, SWT.NONE);
drawWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
drawWidget.addPaintListener(new PaintListener() {
@Override
public void paintControl(final PaintEvent e) {
System.out.println("inDrawWidget");
final Rectangle r = drawWidget.getClientArea();
e.gc.drawOval(0, 0, r.width, r.height);
}
});
我在 Composite
中添加了 GridLayout
,在 Canvas
中添加了 GridData
布局数据。 GridData
使 Canvas
使用所有可用的 space。