Как реализовать функцию системного трея в Java.
Пример диаграммы
Схема структуры пакета проекта
Скриншот работы системы
Применяя описание базовой логики, скрытие в трее по сути означает скрытие формы. То есть setVisible(false), а отображение формы означает setVisible(true).
Код проекта следующий:
импортировать java.awt.AWTException;
импортировать java.awt.MenuItem;
импортировать java.awt.PopupMenu;
импортировать java.awt.SystemTray;
импортировать java.awt.TrayIcon;
импортировать java.awt.event.ActionEvent;
импортировать java.awt.event.ActionListener;
импортировать java.net.URL;
импортировать javax.swing.ImageIcon;
импортировать javax.swing.JFrame;
импортировать javax.swing.JMenu;
импортировать javax.swing.JMenuBar;
импортировать javax.swing.JMenuItem;
публичный класс MainFrame расширяет JFrame и реализует ActionListener {
частный статический окончательный длинный сериалVersionUID = -7078030311369039390L;
личное меню JMenu;
частный JMenuBar jmenuBar;
Private String [] jmItemName = {"Поместить в трей", "Выход из системы"};
общественный MainFrame () {
супер("телефонная книга");
инициализация();
this.setSize(500,400);
this.setJMenuBar(jmenuBar);
this.setLocationRelativeTo(null);
systemTray(); // системный трей
}
/**
* Интерфейс инициализации
*/
публичная недействительная инициализация () {
меню = новый JMenu("Системная форма");
for(int i=0; i<jmItemName.length; i++){
JMenuItemmenuItem = новый JMenuItem(jmItemName[i]);
MenuItem.addActionListener(это);
меню.добавить(менюItem);
}
this.jmenuBar = новый JMenuBar();
this.jmenuBar.add(меню);
}
@Override
общественный недействительный actionPerformed (ActionEvent e) {
Строковые действия = e.getActionCommand();
if("Поместить на лоток".equals(actions)){
this.setVisible(ложь);
}
if("Выход из системы".equals(действия)){
Система.выход(0);
}
}
/**Обработка значков на панели задач.*/
частная пустота systemTray () {
if(SystemTray.isSupported()){ //Определяем, поддерживает ли система функцию лотка.
URL-ресурс = this.getClass().getResource("systray.jpg"); //Получить путь к изображению
ImageIcon icon = new ImageIcon(resource); //Создаем объект изображения
PopupMenu popupMenu = new PopupMenu(); //Создаем объект всплывающего меню.
MenuItem itemExit = new MenuItem("Выход из системы"); //Создаем пункт выхода во всплывающем меню.
MenuItem itemShow = new MenuItem("Форма отображения"); //Создаем элемент основной формы отображения во всплывающем меню.
itemExit.addActionListener(new ActionListener() { //Добавляем прослушиватель событий к выходному изображению
@Override
общественный недействительный actionPerformed (ActionEvent e) {
Система.выход(0);
}
});
itemShow.addActionListener(new ActionListener() { //Добавляем прослушиватель событий, чтобы свернуть форму.
@Override
общественный недействительный actionPerformed (ActionEvent e) {
setVisible (истина);
}
});
popupMenu.add(itemExit);
popupMenu.add(itemShow);
TrayIcon TrayIcon = новый TrayIcon(icon.getImage(),"Система телефонной книги",popupMenu);
SystemTray sysTray = SystemTray.getSystemTray();
пытаться {
sysTray.add(trayIcon);
} поймать (AWTException e1) { }
}
}
/**
* Основной метод
* @param аргументы
*/
public static void main(String[] args) {
новый MainFrame().setVisible(true);
}
}