【发布时间】:2019-01-15 03:40:33
【问题描述】:
我正在开发一个 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 - 我保存坐标的地方。
但是,这仅在整个 Eclipse 窗口被最小化/最大化时才有效,因为此侦听器绑定到主窗口。如果打开一个新的编辑器,什么都不会发生(因为它可能应该可以工作)。
我想在每次打开/激活/单击新编辑器时注册新的 MouseListener - 这样我就可以在打开新编辑器时将它们注册到编辑器。如何订阅/收听与编辑器相关的任何事件(主要是激活/打开新编辑器),然后我可以将 MouseListener 订阅到编辑器并获取鼠标单击的当前 X 和 Y 轴?
感谢您的任何建议。
【问题讨论】:
-
您已经通过多次调用来访问活动编辑器,您是否认为您还需要其他侦听器来实际通知您编辑器正在打开和关闭?检查
iWorkbenchWindow、IWorkbenchPage及其超级接口以查找添加侦听器的位置。 那么这个鼠标监听器有什么用? 像这样的“全局”监听器非常具有侵入性,而且你还没有解释你要解决什么问题。 -
此鼠标侦听器用于检索单击的 X 和 Y 坐标。这些在我进行操作可用性(显示/隐藏操作)过滤时存储和使用 - 我希望我的操作仅在函数声明名称上发生右键单击时出现。我已经设法使用 X 和 Y 坐标来做到这一点,但到目前为止,在没有最小化/最大化整个应用程序的情况下无法获得正确的 X 和 Y 坐标。
标签: eclipse eclipse-plugin mouseevent eclipse-cdt