Как поймать окно минимизации события?
Я хочу создать экземпляр JFrame и по щелчку его minimize button, я хотел бы скрыть его в System Tray, который обычно является taskbar windows.
Я пришел к выводу, что с помощью класса SystemTray в пакете java.awt я могу это сделать, но ни один учебник по нему, ни один пример рабочей программы я не получаю.
Я задал этот вопрос здесь, чтобы либо получить ссылку на сайт-учебник для класса SystemTray, либо, если какой-либо орган знает, как поймать событие минимизации окна, рабочий пример.
5 ответов:
Это будет ловушка окно свернутое событие и создаст значок в трее. Он также удалит окно из панели задач и добавит прослушиватель на иконку в трее, так что щелчок мыши восстановит окно. Код немного отрывочен, но должен быть достаточно хорош для ваших целей обучения:
public class Qwe extends JFrame { public static void main(String[] args) { final Qwe qwe = new Qwe(); qwe.addWindowStateListener(new WindowStateListener() { public void windowStateChanged(WindowEvent e) { if (e.getNewState() == ICONIFIED) { try { final TrayIcon trayIcon = new TrayIcon(new ImageIcon("/usr/share/icons/gnome/16x16/emotes/face-plain.png").getImage()); trayIcon.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { qwe.setVisible(true); SystemTray.getSystemTray().remove(trayIcon); } }); SystemTray.getSystemTray().add(trayIcon); qwe.setVisible(false); } catch (AWTException e1) { e1.printStackTrace(); } } } }); qwe.setSize(200, 200); qwe.setVisible(true); } }
Интерфейс
WindowListenerи методJFrameaddWindowListener()должны помочь вам определить, когда фрейм был минимизирован.
Лучшим способом было бы создать следующее
1) SystemTray
2) Добавьте
JPopopMenuкSystemTray's Icon3) set
DefaultCloseOperationfor TopLevelContainer (в вашем случае JFrame )
С помощью WindowListener
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);В других случаях всегда срабатывает
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);Обратите внимание, не забудьте объявить
System.exit(1)вSystemTray's JpopupMenu, изJMenuItemили другогоAction/Event, потому что в этом виде currenet JVM никогда не уходил из родной ОС пока компьютер не выключится или не перезагрузится