在 SWT 应用程序中更改图形上下文

Change graphic context in SWT application

我有一个用 SWT 编写的简单应用程序。我从 SWT.Paint 事件中得到 GC。在我的主 canvas 中,我添加了一个 MouseMove 侦听器,因此如果鼠标在指定区域,一些文本将显示在指定区域。

我想在鼠标不再位于区域上方后从 GC 中删除文本。我没有发现任何关于从 GC 中删除绘制对象或用新对象替换 GC 的提及。

你能告诉我怎样才能达到这样的结果吗?除了通过 SWT.Paint 事件之外,没有其他方法可以访问 GC 对象。

无法删除在 GC 上绘制的线条文本等元素。尽管 GC 有绘制文本和线条等的方法,但这些方法只是将形状转换为像素,而这就是 GC 所知道的全部。

因此,您的应用程序应维护一个 模型,允许定位文本并删除已放置的文本元素。每当模型发生变化时,canvas 应该用 canvas.redraw() 刷新,这会发送一个 SWT.Paint 事件。然后,您的绘画侦听器可以检查模型并相应地绘制文本。

文章 Graphics Context - Quick on the draw 进一步详细介绍了 SWT 图形上下文。

添加MouseTrackListener并控制鼠标进入和离开canvas

MouseTrackListener mtl = new MouseTrackAdapter() {
    @Override
    public void mouseEnter(MouseEvent e) {
        // add your PaintListener here
    }

    @Override
    public void mouseExit(MouseEvent e) {
    // remove PaintListener here    
    }
};
canvas.addMouseTrackListener(mtl)