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

时间:2016-03-03 10:36:24

标签: eclipse swt

我有一个用SWT编写的简单应用程序。我来自GC活动SWT.Paint。在我的主画布中,我添加了一个MouseMove侦听器,因此如果鼠标位于区域中,则会在指定区域上显示一些文本。

我想在鼠标不再超过区域后从GC删除文本。我没有找到任何提及从GC中删除绘制的对象或用新的替换GC。

你能告诉我怎样才能取得这样的结果?除GC事件外,SWT.Paint}对象无法访问。

2 个答案:

答案 0 :(得分:2)

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

因此,您的应用程序应该维护一个模型,它允许定位文本并删除一次放置的文本元素。每当模型更改时,都应使用nav { float:left; writing-mode:tb-rl;/*IE*/ writing-mode:vertical-lr;/* OPera/webkit*/ writing-mode:sideways-lr;/* should be the one */ } li { display:inline-block; }刷新画布,该<nav> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Clients</a></li> <li><a href="#">Contact Us</a></li> </ul> </nav> <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>会发送canvas.redraw()事件。然后,您的绘图侦听器可以检查模型并相应地绘制文本。

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

答案 1 :(得分:-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)