Как поймать событие минимизации окна?
Я хочу создать 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) {}
});