我正在开发Eclipse插件,我需要将点击位置存储在X和Y轴坐标中。
到目前为止,我是通过使用 org.eclipse.ui.IStartup 接口并在实现它的类中使用此接口来实现的:
@Override
public void earlyStartup() {
IWorkbench wb = PlatformUI.getWorkbench();
wb.addWindowListener(generateWindowListener());
}
在给定的方法中,我这样做:
private IWindowListener generateWindowListener()
{
return new IWindowListener() {
private MouseListener clickMouseListener = new ClickMouseListener();
@Override
public void windowOpened(IWorkbenchWindow window) {
//Nothing
}
@Override
public void windowDeactivated(IWorkbenchWindow window) {
System.out.println("deactivaed");
IWorkbenchPage activePage = window.getActivePage();
activePage.getActiveEditor().getAdapter(org.eclipse.swt.widgets.Control.class).addMouseListener(clickMouseListener);
}
@Override
public void windowClosed(IWorkbenchWindow window) {
//Nothing
}
@Override
public void windowActivated(IWorkbenchWindow window) {
System.out.println("activated");
IWorkbenchPage activePage = window.getActivePage();
activePage.getActiveEditor().getAdapter(org.eclipse.swt.widgets.Control.class).addMouseListener(clickMouseListener);
}
};
}
因此,我基本上是在一般工作台上注册一个侦听器,目的是在新打开的编辑器上注册一个新的MouseListener(将坐标保存在其中)。
但是,这仅在最小化/最大化整个月食窗口时才有效,因为此侦听器已绑定到主窗口。如果打开了新的编辑器,则什么也不会发生(因为它可能应该可以工作)。
我想每次打开/激活/单击新编辑器时都注册新的MouseListener,因此我可以在打开新编辑器时立即将其注册到编辑器中。如何订阅/收听与编辑器有关的任何事件(主要是激活/打开新编辑器),以便随后可以将MouseListener订阅到编辑器并获得鼠标单击的当前X轴和Y轴?
谢谢您的任何建议。
答案 0 :(得分:2)
使用IPartListener
在工作台窗口中监听零件事件:
IPartService partService = window.getPartService();
partService.addPartListener(listener);
这将告诉您所有打开,关闭,激活...的编辑器(和视图)。
在早期启动方法中,工作台窗口尚不可用。使用Display.asyncExec
将代码的运行延迟到UI初始化完成为止:
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
......
}
});