2016-03-03 24 views
1

我有一个用SWT编写的简单应用程序。我从SWT.Paint事件中删除GC。在我的主画布中,我添加了一个MouseMove侦听器,因此如果鼠标位于区域中,某些文本将显示在指定区域上。更改SWT应用程序中的图形上下文

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

你能告诉我怎样才能达到这样的效果吗?除了通过SWT.Paint事件,没有其他访问GC对象的权限。

回答

2

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

因此,您的应用程序应该保留一个模型,它允许定位文本并删除一次放置的文本元素。无论何时模型更改,都应使用canvas.redraw()刷新画布,并发送SWT.Paint事件。然后,您的绘画侦听器可以检查模型并相应地绘制文本。

文章Graphics Context - Quick on the draw有关于SWT图形上下文的更多细节。

-1

添加MouseTrackListener和控制鼠标进入和离开画布

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) 
相关问题