Статьи

Как использовать уведомления платформы NetBeans

Мне очень нравится то, как обрабатываются уведомления при создании приложений на платформе NetBeans. Если вы использовали IDE NetBeans, вы должны увидеть, что при загрузке чего-либо текст появляется в области состояния, то есть в нижнем левом углу.

Чтобы использовать эту область уведомлений, вам просто нужно использовать эту строку в вашем собственном приложении:

StatusDisplayer.getDefault().setStatusText("Hola mundo");

Также есть всплывающая подсказка, которую вы должны были видеть, когда IDE NetBeans находит обновления. Этот шар доступен и для вашего приложения! Как это использовать? Просто … в блоге Квинтина Бьюка , Есть три класса, которыми автор приятно делится со всеми в сети, которые я использую в своем приложении с небольшими изменениями.

Это классы:

package org.metalklesk.utilities;

import java.net.URL;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.openide.NotifyDescriptor;

/**
*
* @author qbeukes.blogspot.com, used by metalklesk
*/
public enum MessageType {
PLAIN (NotifyDescriptor.PLAIN_MESSAGE, null),
INFO (NotifyDescriptor.INFORMATION_MESSAGE, "info.png"),
QUESTION(NotifyDescriptor.QUESTION_MESSAGE, "question.png"),
ERROR (NotifyDescriptor.ERROR_MESSAGE, "error.png"),
WARNING (NotifyDescriptor.WARNING_MESSAGE, "warning.png");

private int notifyDescriptorType;

private Icon icon;

private MessageType(int notifyDescriptorType, String resourceName) {
this.notifyDescriptorType = notifyDescriptorType;
if (resourceName == null) {
icon = new ImageIcon();
} else {
icon = loadIcon(resourceName);
}
}

private static Icon loadIcon(String resourceName) {
URL resource = MessageType.class.getResource("images/" + resourceName);
System.out.println(resource);
if (resource == null) {
return new ImageIcon();
}

return new ImageIcon(resource);
}

int getNotifyDescriptorType() {
return notifyDescriptorType;
}

Icon getIcon() {
return icon;
}
}

Не забудьте поместить изображения в папку вашего пакета / изображений.

package org.metalklesk.utilities;

import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;

/**
*
* @author qbeukes.blogspot.com, used by metalklesk
*/
public class MessageUtil {

private MessageUtil() {}

/**
* @return The dialog displayer used to show message boxes
*/
public static DialogDisplayer getDialogDisplayer() {
return DialogDisplayer.getDefault();
}

/**
* Show a message of the specified type
*
* @param message
* @param messageType As in {@link NotifyDescription} message type constants.
*/
public static void show(String message, MessageType messageType) {
getDialogDisplayer().notify(new NotifyDescriptor.Message(message,
messageType.getNotifyDescriptorType()));
}

/**
* Show an exception message dialog
*
* @param message
* @param exception
*/
public static void showException(String message, Throwable exception) {
getDialogDisplayer().notify(new NotifyDescriptor.Exception(exception, message));
}

/**
* Show an information dialog
* @param message
*/
public static void info(String message) {
show(message, MessageType.INFO);
}

/**
* Show an error dialog
* @param message
*/
public static void error(String message) {
show(message, MessageType.ERROR);
}

/**
* Show an error dialog for an exception
* @param message
* @param exception
*/
public static void error(String message, Throwable exception) {
showException(message, exception);
}

/**
* Show an question dialog
* @param message
*/
public static void question(String message) {
show(message, MessageType.QUESTION);
}

/**
* Show an warning dialog
* @param message
*/
public static void warn(String message) {
show(message, MessageType.WARNING);
}

/**
* Show an plain dialog
* @param message
*/
public static void plain(String message) {
show(message, MessageType.PLAIN);
}
}
package org.metalklesk.utilities;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.ErrorManager;
import org.openide.awt.Notification;
import org.openide.awt.NotificationDisplayer;

/**
*
* @author qbeukes.blogspot.com, used by metalklesk
*/
public class NotifyUtil {

private NotifyUtil() {}

/**
* Show message with the specified type and action listener
*/
public static void show(String title, String message, MessageType type, ActionListener actionListener, boolean clear) {
Notification n = (Notification) NotificationDisplayer.getDefault().notify(title, type.getIcon(), message, actionListener);
if(clear == true)
n.clear();
}

/**
* Show message with the specified type and a default action which displays the
* message using {@link MessageUtil} with the same message type
*/
public static void show(String title, final String message, final MessageType type, boolean clear) {
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MessageUtil.show(message, type);
}
};

show(title, message, type, actionListener, clear);
}

/**
* Show an information notification
* @param message
*/
public static void info(String title, String message, boolean clear) {
show(title, message, MessageType.INFO, clear);
}

/**
* Show an error notification
* @param message
*/
public static void error(String title, String message, boolean clear) {
show(title, message, MessageType.ERROR, clear);
}

/**
* Show an error notification for an exception
* @param message
* @param exception
*/
public static void error(String title, final String message, final Throwable exception , boolean clear) {
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ErrorManager.getDefault ().notify (exception);
//MessageUtil.showException(message, exception);
}
};

show(title, message, MessageType.ERROR, actionListener, clear);
}

/**
* Show an warning notification
* @param message
*/
public static void warn(String title, String message, boolean clear) {
show(title, message, MessageType.WARNING, clear);
}

/**
* Show an plain notification
* @param message
*/
public static void plain(String title, String message, boolean clear) {
show(title, message, MessageType.PLAIN, clear);
}

}

С этими 3 классами в вашем приложении на платформе NetBeans вы можете использовать всплывающее уведомление:

NotifyUtil.warn("title", "warning message", false);
NotifyUtil.show("title", "info message", false);
NotifyUtil.show("title", "info message", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//do something
}
};, false);
NotifyUtil.error("title", "error message”, false);
NotifyUtil.error("title", "error message", exception, false);

Последний показывает наше исключение в информационном диалоге.

И, наконец, если мы хотим показать уведомление в информационном диалоге, вместо использования JOptionPanel, мы можем использовать это:

MessageUtil.showException("message", exception);
MessageUtil.error("message", exception);
MessageUtil.error("message");
MessageUtil.info("message");
MessageUtil.question("message");
MessageUtil.plain("message");

Вот и все!

Вот несколько скриншотов, где вы можете увидеть уведомления в действии: