前言
本文介绍三种常用的通知提醒方式,每种方式都适用不同场景,需要合理使用。本文演示代码请查看idea-plugin-demo。
Dialog
Dialog是一种比较常见的通知形式,IntellJ平台包装了一个易用的Messages类给开发者使用,通过这个类可以做一些简单的通知并接收用户的反馈,如下所示是通过showYesNoCancelDialog展示的Dialog,反复返回结果表示用户点击了哪个按钮。
int result = Messages.showYesNoCancelDialog(e.getProject(), "Yes or no dialog 测试 测试,你选择的是" + selectedText, "Plugin Demo",
"Yes", "No", "Cancel", Messages.getQuestionIcon());
if (result == Messages.YES) {
LOG.error("MessageDialogAction actionPerformed YES");
} else if (result == Messages.NO) {
LOG.error("MessageDialogAction actionPerformed NO");
}
Dialog的作用不仅仅能作为简单的通知,而且还可以通过继承DialogWrapper去定制Dialog展示复杂页面。
Editor Hints
编辑器浮动提醒如下图所示,一般用于展示与插入位置相关的提醒,如下图所示提醒了插入符号的位移、行号、列号。浮动提醒支持渲染HTML,可以展示比较丰富的内容。
public void showHint(Editor editor, String text) {
if (StringUtils.isBlank(text)) {
return;
}
HintManagerImpl hintManager = (HintManagerImpl) HintManagerImpl.getInstance();
JComponent label = HintUtil.createInformationLabel(text, null, null, null);
AccessibleContextUtil.setName(label, "Hint");
LightweightHint hint = new LightweightHint(label);
Point p = HintManagerImpl.getHintPosition(hint, editor, editor.getCaretModel().getVisualPosition(), (short) 1);
int flags = HintManager.HIDE_BY_ANY_KEY | HintManager.HIDE_BY_TEXT_CHANGE | HintManager.HIDE_BY_SCROLLING;
hintManager.showEditorHint(hint, editor, p, flags, 0, true, (short) 1);
}
Ballon
气泡提醒也是经常使用的一种,这种通知没有上面两种那么强烈,而且会按照时间线进行展示,并且可以在底部带出相应的执行动作。
首先需要先在plugin.xml定义notificationGroup,然后才可以在代码里通过NotificationGroupManager并指定id获取notificationGroup实例,通过链式调用构建Notification,并且可以添加回调函数作为Action。
NotificationGroupManager.getInstance().getNotificationGroup("Idea Plugin Demo")
.createNotification("Idea Plugin Demo title","通知内容,点击动作之后会打一条错误日志", NotificationType.INFORMATION)
.addAction(new NotificationAction("动作名称"){
@Override
public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) {
LOG.error("BalloonNotificationAction NotificationAction actionPerformed");
}
}).notify(e.getProject());
<extensions defaultExtensionNs="com.intellij">
<notificationGroup id="Idea Plugin Demo" displayType="BALLOON" key="notification.group.name"/>
</extensions>
参考
https://plugins.jetbrains.com/docs/intellij/notifications.html