首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与swt canvas.redraw混淆

与swt canvas.redraw混淆
EN

Stack Overflow用户
提问于 2015-09-15 19:50:29
回答 1查看 57关注 0票数 0

我是swt的新手,在代码below.when中我点击测试按钮,控制台打印"start“"end”和"in canvas",为什么它不打印"start“"in canvas”"end“。如果这不是问题,我怎么能让控制台在canvas“”end“”.Thanks中打印"start“”呢?

新建(canvas.addPaintListener PaintListener() {

代码语言:javascript
复制
        @Override
        public void paintControl(PaintEvent e) {
            System.out.println("in canvas");
        }
    });
    test.addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            System.out.println("start");
            canvas.redraw();
            System.out.println("end");
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {

        }
    });
EN

回答 1

Stack Overflow用户

发布于 2015-09-15 20:05:11

我不是swt的高手,但一般来说,如果你做一些像redraw(),repaint(),postInvalidate()或其他类似的调用,在几乎所有的gui框架中,这些调用不会直接重绘内容,它们只是在gui绘制队列中放一条指令,所以它们通常会在你实际调用后的一段时间内执行。因此,在您的代码中,首先完成widgetSelected,然后在GUI线程上执行“重绘”任务。

有时,像在java中,有一个类似的方法,例如在swing中有paintImmidiatelly(),但它只能从GUI线程调用,通常情况下,当你在侦听器中得到一个GUI事件时,通常这是一个来自GUI线程的调用,它已经捕获了这个事件。

也许你可以在swt中使用update(),强制在适当的地方绘制它。

重绘的工作方式如下:

代码语言:javascript
复制
redraw() marks the widget an invalidated. On next redraw-system-action this area will be repainted.
update() forces all outstanding redraw() requests to be completed NOW.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32585352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档