#java #swing #notifications #desktop-application #system-tray
#java #уведомления
Вопрос:
В Windows 10 есть уведомление, которое открывается в правом нижнем углу экрана, и я нахожу их весьма полезными.
Есть ли какой-либо способ создания уведомлений Windows на Java? Вот как они выглядят:
Ответ №1:
Я могу успешно получить этот результат, используя этот очень простой пример кода:
import java.awt.*;
import java.awt.TrayIcon.MessageType;
public class TrayIconDemo {
public static void main(String[] args) throws AWTException {
if (SystemTray.isSupported()) {
TrayIconDemo td = new TrayIconDemo();
td.displayTray();
} else {
System.err.println("System tray not supported!");
}
}
public void displayTray() throws AWTException {
//Obtain only one instance of the SystemTray object
SystemTray tray = SystemTray.getSystemTray();
//If the icon is a file
Image image = Toolkit.getDefaultToolkit().createImage("icon.png");
//Alternative (if the icon is on the classpath):
//Image image = Toolkit.getDefaultToolkit().createImage(getClass().getResource("icon.png"));
TrayIcon trayIcon = new TrayIcon(image, "Tray Demo");
//Let the system resize the image if needed
trayIcon.setImageAutoSize(true);
//Set tooltip text for the tray icon
trayIcon.setToolTip("System tray icon demo");
tray.add(trayIcon);
trayIcon.displayMessage("Hello, World", "notification demo", MessageType.INFO);
}
}
Комментарии:
1. Один вопрос, как бы мне установить восклицательный знак для его собственной текстуры, я видел другие уведомления с пользовательскими файлами png в виде значков.
2. Не похоже, что это возможно — похоже, что эта функция недоступна в AWT, возможно, она доступна только в собственных наборах инструментов Windows gui.
3. В настоящее время уведомление удаляется из центра действий после истечения срока его действия. Есть ли способ сохранить его там?
4. Супер ответ. Есть ли способ остановить значок в системном трее от предотвращения выхода JVM?
5. @JohannesBrodwall если вы удалите
trayIcon
изtray
(tray.remove(trayIcon)
), JVM завершит работу. Имейте в виду, что если вы удалите его, пока уведомление все еще открыто, уведомление волшебным образом исчезнет.
Ответ №2:
Этого можно достичь с помощью классов SystemTray и TrayIcon. Кроме того, если это новый для вас API, вы можете проверить специальное руководство «Как использовать системный трей«.
Ответ №3:
вы можете легко использовать уведомления с javafx с помощью класса уведомлений java.lang.Объект org.controlsfx.control.Уведомления
public static showNotification(String title,String text){
Notifications notificationTest=Notifications.create();
notificationTest.position(Pos.BASELINE_RIGHT);
notificationTest.title(title);
notificationTest.text(text);
notificationTest.show();//for error noti notificationTest.showError();
}
https://www.javadoc.io/static/org.controlsfx/controlsfx/8.40.16/org/controlsfx/control/Notifications.html