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

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

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


лучший способ было бы создать следует

1) SystemTray

2) Добавить JPopopMenu до SystemTray's Icon

3) установить DefaultCloseOperation на 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) {}
});