如何在SWT中使鼠标的状态变成忙碌

Eclipse Plug-in开发离不开与用户的交互,我们往往把用户的鼠标点击之类动作所调用的代码包装成一个Action。例如,如果用户点击了一个Menu Item,那么绑定到这个Menu Item上的Action就会运行,这一切都很直观。但是有的时候,用户触发的操作可能需要很长时间才能完成,比如连接数据库,在这种情况下,就必须把鼠标的状态改为忙碌,这样就可以用沙漏手势提示用户当前操作正在进行,也避免了用户在等待当前操作的时候又去触发其他的操作。那么如何实现这一点呢?Eclipse有一个High-level的实现,也有一个Low-level的实现。因为后者非常简单,而且在大多数情况下也能满足需求,所以这里会介绍后者。 

我们可以在org.eclipse.swt.custom包中找到一个BusyIndicator类,它的Java Doc说得好:Support for showing a Busy Cursor during a long running process。该类只有一个static的方法,让我们来看看它的签名: 

public static void showWhile(Display display, Runnable runnable) 

其中,display参数指定了Busy Cursor应该显示在哪里,如果传入null,则默认使用当前线程的当前Display;runnable就是封装了我们要执行的操作的对象。这个方法会执行runnable中的操作,同时显示Busy Cursor,当runnable结束后,鼠标的状态就会恢复为正常。OK,让我们来看一个例子: 
public class DoubleClickTreeNodeAction extends Action {  
  
    /* 
     * (non-Javadoc) 
     *  
     * @see org.eclipse.jface.action.Action#run() 
     */  
    public void run() {  
        // get Display from your own plug-in  
        BusyIndicator.showWhile(Activator.getDefault().getWorkbench()  
                .getDisplay(), new Runnable() {  
            public void run() {  
                performAction();  
            }  
        });  
    }  
  
    private void performAction() {  
        // connecting to database...  
    }  
  
}  


你可能感兴趣的:(eclipse,RCP)