【问题标题】:How to create a custom SWT Tooltip using JFACE for an RCP MDirectToolItem?如何使用 JFACE 为 RCP MDirectToolItem 创建自定义 SWT 工具提示?
【发布时间】:2019-10-17 12:01:30
【问题描述】:

我想为 RCP MDirectToolItem 或 MHandledToolItem 创建自定义工具提示。 JFace 提供了 org.eclipse.jface.window.ToolTip 类,我可以扩展和覆盖 createToolTipContentArea() 方法。但是,要实例化 JFace ToolTip,我必须为其提供将使用 ToolTip 的 SWT 控件。我想不出从 MDirectToolItem 获取底层 SWT 控件的方法。

我已经能够使用 EModelService.find() 方法获取 MToolBar 和 MDirectToolItem(我在 Application.e4xmi 中定义)。我尝试从 MDirectToolItem 获取底层 SWT 控件,但似乎没有办法做到这一点。

我也尝试创建一个 SWT ToolItem 并将其添加到 MToolBar,但 MToolBar 的子级只是 MToolBarElement 的。

【问题讨论】:

    标签: eclipse swt jface rcp e4


    【解决方案1】:

    工具项没有单独的控件,它们是父 ToolBar 控件的一部分。 SWT ToolItem 类代表工具项,它只是从Widget 派生而不是Control

    因此,您必须在工具栏控件上设置工具提示,并确定在显示工具提示时哪个工具项处于活动状态。

    代表 UI 对象的应用程序模型类都扩展了MUIElement 接口。这提供了一个getWidget 方法来获取UI 对象。

    所以对于MToolBar,你可以这样做:

    ToolBar toolbar = (ToolBar)mtoolbar.getWidget();
    

    对于MToolItem(处理或直接),您可以这样做:

    ToolItem toolitem = (ToolItem)mtoolitem.getWidget();
    

    如果您使用NO_RECREATE 样式创建ToolTip,它将调用 getToolTipArea 方法来确定是否需要更改工具提示。您可以使用以下内容为每个工具项设置不同的区域:

    @Override
    protected Object getToolTipArea(final Event event)
    {
      // TODO save the ToolBar in the class as 'toolBar'
      ToolItem item = toolBar.getItem(new Point(event.x, event.y));
      if (item != null)
        return item;
    
      return super.getToolTipArea(event);
    }
    

    【讨论】:

    • 感谢您的回复!有效! Storytime:我昨天整天都在研究这个问题,最后我放弃了,决定在这里发布一个问题。我的一位同事注意到并问我为什么要发帖,我从字面上回答“我希望 greg-449 能帮助我”。哈哈!感谢您在 SWT、RCP 和 JFace 方面的所有精心编写的答案。帮了大忙!
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多