用javaswt绘制动态原语

用javaswt绘制动态原语,java,swt,Java,Swt,我有C++/Qt背景,现在正在学习Java和SWT GUI编程。我需要在图像上画一些基本形状(圆、矩形等)。形状需要在图像上移动(即改变其相对于背景的位置,想象实时更新的地图)。在Qt中,这可以通过使用qgraphicscene和QGraphicsItems轻松实现,但如何在SWT中实现这一点?我曾尝试将Composite与Label一起使用,这与我所需要的非常接近,但我还没有找到一种方法将基本图形添加到合成中。画布控件专门用于绘图。基本绘图操作在GC类中 Canvas drawWidget =

我有C++/Qt背景,现在正在学习Java和SWT GUI编程。我需要在图像上画一些基本形状(圆、矩形等)。形状需要在图像上移动(即改变其相对于背景的位置,想象实时更新的地图)。在Qt中,这可以通过使用
qgraphicscene
QGraphicsItem
s轻松实现,但如何在SWT中实现这一点?我曾尝试将
Composite
Label
一起使用,这与我所需要的非常接近,但我还没有找到一种方法将基本图形添加到合成中。

画布控件专门用于绘图。基本绘图操作在
GC
类中

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) {
        Rectangle r = drawWidget.getClientArea();
        e.gc.drawOval(0, 0, r.width - 1, r.height - 1);
    }
});
调用Canvas
redraw
方法请求重画控件。这将再次调用绘制侦听器


其他Eclipse软件包(如Eclipse GEF)提供了更为复杂的绘图API。

稍后如何更新示例中绘制的椭圆的位置?您可以在画布上调用
redraw()
,强制重新绘制椭圆。然后会再次呼叫油漆倾听者。谢谢,这似乎起到了作用。我发现解决这个问题的方法有点不同。