弄清楚如何在屏幕右上角显示那些小通知气泡消息之一,请在下面回答。
事实证明,您必须创建一个NotificationGroup实例,然后使用它来创建一个Notification,并将通知和Project传递给Notifications.Bus.notify()。
public class VoiceApplicationComponentImpl implements ApplicationComponent, VoiceApplicationComponent {
...
public static final NotificationGroup GROUP_DISPLAY_ID_INFO =
new NotificationGroup("My notification group",
NotificationDisplayType.BALLOON, true);
...
void showMyMessage(String message) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
Notification notification = GROUP_DISPLAY_ID_INFO.createNotification(message, NotificationType.ERROR);
Project[] projects = ProjectManager.getInstance().getOpenProjects();
Notifications.Bus.notify(notification, projects[0]);
}
});
}
注意:您可能有一种更好的方法来获取当前项目,现在我只是假设有一个打开的项目。这意味着我的方法在启动时不起作用(项目数组为空)。
另一个注意事项:您可能不需要用invokeLater 换行,但我这样做了,因为我在不同的线程中调用showMyMessage。
这样会更好!
StatusBar statusBar = WindowManager.getInstance()
.getStatusBar(DataKeys.PROJECT.getData(actionEvent.getDataContext()));
JBPopupFactory.getInstance()
.createHtmlTextBalloonBuilder(htmlText, messageType, null)
.setFadeoutTime(7500)
.createBalloon()
.show(RelativePoint.getCenterOf(statusBar.getComponent()),
Balloon.Position.atRight);
参考链接:
1.原链接
2.在此输入链接描述
官方文档解释了如何正确操作:
您可以通过在您的
plugin.xml
中注册来创建通知组
<extensions defaultExtensionNs="com.intellij">
[...]
<notificationGroup id="Custom Notification Group"
displayType="BALLOON"/>
</extensions>
然后使用您的组的 ID 构建一个
Notification
// See the other values of NotificationType for other types of notifications
new Notification("Custom Notification Group", "Notification Title", "Notification body.", NotificationType.ERROR);
最后推上巴士
Notifications.Bus.notify(myNotification, myProject);
例如:
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationType;
import com.intellij.notification.Notifications;
// [...]
// You should be able to get to the current project from almost anywhere.
// For example if you're working with a PsiFile use PsiFile.getProject()
public static void createErrorNotification(final String title, final String body, final Project project) {
// Notification group defined in plugin.xml using the com.intellij.notificationGroup extension point
final Notification notification = new Notification("Custom Notification Group", title, body, NotificationType.ERROR);
Notifications.Bus.notify(notification, project);
}
与使用已弃用的构造函数和不存在的 ID 创建新的通知组不同,这允许您的用户从 IDE 的设置中配置组的通知(例如更改外观、添加声音...)