【问题标题】:Message Manager displays messages only as field decorators and not in header消息管理器仅将消息显示为字段装饰器而不是标题
【发布时间】:2016-10-18 12:51:07
【问题描述】:

我正在使用 Eclipse MessageManager 在输入无效的情况下提供错误消息。例如:

mmng.addMessage("textLength", "blah", null, IMessageProvider.ERROR, field);

我这样做了两次。一次在 ModifyListener 的实例中,一次在创建 Text 字段之后,以便在加载时验证输入。

当在modifyEvent 的子实例的modifyEvent 方法中调用addMessage 方法时,MessageManager 在页面标题和文本字段(装饰器)旁边显示错误。但是,在创建文本字段后立即添加消息时,只会显示一个装饰器(标题中没有错误说“检测到 n 个错误”)。

我想知道为什么会这样。我用 Eclipse ProductEditor 对此进行了测试,实际上有类似的行为。如果您打开第一页上有错误的.product 文件,则错误不会出现在标题中(只会出现装饰器)。但是,当切换到其他页面再切换回这个特定页面时,会出现页眉中的错误。不幸的是,这不是我这边的情况。如果我能实现相同的行为,我会很满意,即使最好的情况是在两个位置、标题和字段旁边作为装饰器自动显示错误。

我也尝试通过调用MessageManager实例的update()方法来解决这个问题,但不幸的是,这并没有解开谜团。

顺便说一下,我使用的是 Eclipse Luna 2。

【问题讨论】:

    标签: java eclipse swt eclipse-pde


    【解决方案1】:

    我调试了MessageManager 类并注意到update 方法中的以下情况:

    if (form.getHead().getBounds().height == 0 || mergedList.isEmpty() || mergedList == null) {
                form.setMessage(null, IMessageProvider.NONE);
                return;
    }
    

    除了mergedList 为空时会抛出 NPE,这种情况对我来说似乎很奇怪。但是,设置头部高度解决了我的问题:

    form.getForm().getHead().setBounds(0, 0, 0, 1);
    

    【讨论】:

      猜你喜欢
      • 2013-04-28
      • 2011-11-26
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多