Eclipse Plug-in开发离不开与用户的交互,我们往往把用户的鼠标点击之类动作,例如,如果用户点击了一个Menu Item,那么绑定到这个Menu Item上的Action就会运行,这一切都很直观。但是有的时候,用户触发的操作可能需要很长时间才能完成,比如连接数据库,在这种情况下,就必须把鼠标的状态改为忙碌,这样就可以用沙漏手势提示用户当前操作正在进行,也避免了用户在等待当前操作的时候又去触发其他的操作。那么如何实现这一点呢?
Eclipse提供了两种实现机制;
(一)通过在您的处理事件中设置鼠标形状来完成预期结果,其对应的包为org.eclipse.swt.graphics.Cursor;提供的鼠标状态有很多种,我们通常只使用两种:
1. SWT.CURSOR_WAIT 等待状态,鼠标的形状为漏斗状
2. SWT.NONE 正常状态,鼠标的形状为正常箭头状
实例代码如下:
tree.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) { tree.setCursor(new Cursor(null,SWT.CURSOR_WAIT));
//您的鼠标处理事件
tree.setCursor(new Cursor(null,SWT.NONE));
}
});
}
});
Action 的处理实例代码:
new Action(“添加”)
{
public void run(){
tree.setCursor(new Cursor(null,SWT.CURSOR_WAIT));
//您的鼠标处理事件
tree.setCursor(new Cursor(null,SWT.NONE));
}
};
(二)通过org.eclipse.swt.custom.BusyIndicator提供的一个方法来设置事件处理时的鼠标状态。其方法为:public static void showWhile(Display display, Runnable runnable) 其中,display参数指定了Busy Cursor应该显示在哪里,如果传入null,则默认使用当前线程的当前Display;runnable就是封装了我们要执行的操作的对象。这个方法会执行runnable中的操作,同时显示Busy Cursor,当runnable结束后,鼠标的状态就会恢复为正常。
BusyIndicator.showWhile(Activator.getDefault().getWorkbench()
.getDisplay(), new Runnable() {
public void run() {
//逻辑处理代码
});
实例代码如下:
tree.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
BusyIndicator.showWhile(Activator.getDefault().getWorkbench()
.getDisplay(), new Runnable() {
public void run() {
//逻辑处理代码
}
});
}
});
Action 处理代码:
new Action(“添加”)
{
public void run(){
BusyIndicator.showWhile(Activator.getDefault().getWorkbench()
.getDisplay(), new Runnable() {
public void run() {
//您的鼠标处理事件 }
});
}
};
写的不够完善,如果不对的地方可以与我联系。E-mail:[email protected]