如何在 IntelliJ 中显示通知?

问题描述 投票:0回答:3

弄清楚如何在屏幕右上角显示那些小通知气泡消息之一,请在下面回答。

java intellij-idea intellij-plugin
3个回答
19
投票

事实证明,您必须创建一个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。


0
投票

这样会更好!

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.在此输入链接描述


0
投票

官方文档解释了如何正确操作:

您可以通过在您的

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 的设置中配置组的通知(例如更改外观、添加声音...)

© www.soinside.com 2019 - 2024. All rights reserved.