在view关闭时执行某些操作

    技术2022-05-11  48

    1.判断这个view当前是否为active的好方法: private boolean isActivePart() {         IWorkbenchPart part= getActivePart();         return part != null && part.equals(this); } 2.自己的rcp程序里有多个view,它们之间是有联系的,如果关掉其中一个view时, 要做些事,怎么知道它是什么时候关掉的呢?我在rcp的新闻组上找到了答案: 关掉Editor或Viewer时调用自己逻辑的方法: 1)如果是editor,那么让它实现org.eclipse.ui.ISaveablePart2接口. 2)如果是view,在view class里面加上下面这个方法,并且调用它,比如: 在ViewPart#init()里面: private void initPartListener() { getSite().getPage().addPartListener(new IPartListener() {     public void partOpened(IWorkbenchPart part) {         if (part != YourPartView.this) {             return;         } else {             // your logics         }     }     public void partDeactivated(IWorkbenchPart part) {         if (part != YourPartView.this) {             return;         } else {         // your logics         }     }     public void partClosed(IWorkbenchPart part) {         if (part != YourPartView.this) {             return;         } else {             // your logics         }     }     public void partBroughtToTop(IWorkbenchPart part) {         if (part != YourPartView.this) {             return;         } else {             // your logics         }     }     public void partActivated(IWorkbenchPart part) {         if (part != YourPartView.this) {             return;         } else {             // your logics         }         }     }); } 或者这样写也可以: 让这个view类实现PartListener接口 然后在这个view的createPartControl()里加上: getViewSite().getPage().addPartListener(this); 或是这样写: public void createPartControl(Composite parent) {                ...             getSite().getWorkbenchWindow(). getPartService().addPartListener(this); } public void dispose() {            getSite().getWorkbenchWindow(). getPartService().removePartListener(this); } 注意: 1)Views也能实现ISaveablePart(2) 2)在view关闭时要做什么事时,建议就用IPartListener2 3)View上的X是与关闭动作关联在一起的,要用别的方法达到目的你只有写自己的 关闭动作. 4)ISaveablePart有意义吗? 当然有,有些程序的data model在view上,它们能被修改,所以它们必须有在view 关闭时保存的能力.(所以用户的修改不会丢失) 有些时候editors不适合展示数据model.

    最新回复(0)