Как поймать событие минимизации окна?
Я хочу создать 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 никогда не выходил из родной ОС до выключения или перезагрузки ПК
frame.addWindowListener(new WindowAdapter() {@Override
public void windowIconified(WindowEvent e) {}
});