消息管理器仅将消息显示为字段修饰符,而不显示在标题中

时间:2016-10-18 12:51:08

标签: java eclipse swt eclipse-pde

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

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

我这样做了两次。进入ModifyListener的实例后,在创建Text字段后立即执行,以验证加载时的输入。

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

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

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

顺便说一下,我正在使用Eclipse Luna 2。

1 个答案:

答案 0 :(得分:0)

我调试了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);