【问题标题】:Create a MultipageEditor for XML为 XML 创建一个 MultipageEditor
【发布时间】:2016-05-04 09:05:51
【问题描述】:

我正在开发一个 eclipse 插件,我想使用一个编辑器,在当前页面上设置一些监听器(好的术语?),并在用户切换到另一个页面时删除这些监听器(基本上,用户是编辑多个文件,就像使用默认的 JAVA 编辑器一样)。

目前我已经编写了一个扩展 StructuredTextEditor 的类。插件的行为是预期的,但是当我尝试处理多个文件时,会出现很多问题。在我看来,主要问题是当用户打开另一个页面时我无法收到通知。

我阅读(并测试了)一些关于 MultiPageEditor 的内容,但它似乎没有将 XML 编辑器集成为默认编辑器。我应该如何进行以获得具有 XML 语法着色的 MultiPageEditor,并在用户更改当前页面以调整我的侦听器时收到通知?

感谢阅读。

【问题讨论】:

  • 默认的 Java 编辑器不会编辑多个文件。为每个文件启动一个单独的编辑器副本。现有的 Eclipse WST XML 编辑器使用多页编辑器来显示单个 XML 文件的不同视图。
  • 所以我可能是在 Java 编辑器的情况下:每次都会启动一个编辑器。但是如果我打开 3 个文件,我打开了 3 个编辑器,当我对其中一个执行操作时,来自所有编辑器的侦听器会同时被触发。这是我不太明白的事情
  • 文本选择监听器:ISelectionListener,以及打开编辑器时的监听器:IPartListener2
  • IPartListener2 告诉您每个部分,因此您需要检查它报告的内容。 ISelectionListener 提供选择服务,告诉您各地的选择 - 这可能不是您想要的。
  • 你说得对,这绝对不是我想要使用的。在这种情况下你会建议什么?我需要在文本选择发生时立即注意(或简单地单击文本)。

标签: java xml eclipse editor


【解决方案1】:

代码并不完美,但至少您会有一个集成 XMLEditor 的 MultiPageEditor 示例:https://github.com/fusesource/fuseide/blob/8.0.0.Beta2/editor/plugins/org.fusesource.ide.camel.editor/src/org/fusesource/ide/camel/editor/CamelEditor.java

想法是在 createPages() 方法中调用 addPage(new StructuredTextEditor())。

问候,

【讨论】:

    【解决方案2】:

    在您的编辑器中,您可以使用以下命令收听编辑器文本中的选择更改:

    getSelectionProvider().addSelectionChangedListener(listener);
    

    listener 在哪里实现ISelectionChangedListener

    这适用于从AbstractTextEditor 派生的任何编辑器(包括StructuredTextEditor

    您需要在编辑器创建的后期执行此操作。在createPartControl 方法中起作用:

    @Override
    public void createPartControl(final Composite parent)
    {
      super.createPartControl(parent);
    
      getSelectionProvider().addSelectionChangedListener(listener);
    }
    

    【讨论】:

    • 我可能遗漏了一些东西,因为这个听众从来没有被我召唤过。我尝试了几种“选择”:简单单击,双击,手动选择,但方法selectionChanged似乎从未调用过
    • 添加了添加监听器的建议位置。
    • 我可能很烦人,但我不知道在哪里可以从我的扩展 StructuredTextEditor 的类中找到 Composite 对象
    • 这是对现有方法的覆盖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多