【发布时间】:2015-10-04 00:39:07
【问题描述】:
想出了如何在屏幕右上角显示这些小通知气泡消息之一,请在下面回答。
【问题讨论】:
标签: java intellij-idea intellij-plugin
想出了如何在屏幕右上角显示这些小通知气泡消息之一,请在下面回答。
【问题讨论】:
标签: java intellij-idea intellij-plugin
事实证明,您必须创建一个 NotificationGroup 实例,然后使用它来创建一个通知,并将通知和项目传递给 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。
【讨论】:
ApplicationManager.getApplication().invokeLater 是必要的吗?doc 没有提到它
这样会更好!
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);
【讨论】: