Как поймать окно минимизации события?


Я хочу создать экземпляр JFrame и по щелчку его minimize button, я хотел бы скрыть его в System Tray, который обычно является taskbar windows.

Я пришел к выводу, что с помощью класса SystemTray в пакете java.awt я могу это сделать, но ни один учебник по нему, ни один пример рабочей программы я не получаю.

Я задал этот вопрос здесь, чтобы либо получить ссылку на сайт-учебник для класса SystemTray, либо, если какой-либо орган знает, как поймать событие минимизации окна, рабочий пример.

5 6

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 и метод JFrame addWindowListener() должны помочь вам определить, когда фрейм был минимизирован.

Лучшим способом было бы создать следующее

1) SystemTray

2) Добавьте JPopopMenu к SystemTray's Icon

3) set DefaultCloseOperation for 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 никогда не уходил из родной ОС пока компьютер не выключится или не перезагрузится

private void windowStateChanged(java.awt.event.WindowEvent evt) {
    // Use getExtendedstate here.
}
frame.addWindowListener(new WindowAdapter() {@Override
    public void windowIconified(WindowEvent e) {}
});