Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 在SWT应用程序中更改图形上下文_Eclipse_Swt - Fatal编程技术网

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

Eclipse 在SWT应用程序中更改图形上下文,eclipse,swt,Eclipse,Swt,我有一个用SWT编写的简单应用程序。我正在从SWT.Paint事件获取GC。在我的主画布中,我添加了一个MouseMove监听器,这样,如果鼠标位于指定区域,一些文本将显示在指定区域上 我想在鼠标不再停留在该区域后从GC中删除文本。我没有发现任何关于从GC中删除绘制对象或用新对象替换GC的内容 你能告诉我怎样才能取得这样的成绩吗?除了通过SWT.Paint事件之外,没有其他途径可以访问GC对象。无法删除GC上绘制的线条文本等元素。尽管GC有绘制文本和线条等的方法,但这些方法只是将形状转换为像素,

我有一个用SWT编写的简单应用程序。我正在从
SWT.Paint
事件获取
GC
。在我的主画布中,我添加了一个
MouseMove
监听器,这样,如果鼠标位于指定区域,一些文本将显示在指定区域上

我想在鼠标不再停留在该区域后从
GC
中删除文本。我没有发现任何关于从GC中删除绘制对象或用新对象替换GC的内容


你能告诉我怎样才能取得这样的成绩吗?除了通过
SWT.Paint
事件之外,没有其他途径可以访问
GC
对象。

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

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


本文提供了有关SWTs图形上下文的更多详细信息。

添加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)