Java: сворачивание в трей
В данном материале мы разберем возможность сворачивания в трей окна на языке Java. Для этого напишем класс наследник от JFrame, создадим экземпляр этого класса (строка) и добавим его обработчик (строки). Обратите внимание на строку № 76 - здесь мы делаем так, чтобы окно было всегда сверху других - поверх остальных окон. Вот, собственно говоря, и все, что творится у нас в основном методе - вся остальная "движуха" происходит в конструкторе класса Up7 - не забываем добавить к нему throws IOException. В этот раз я решил отойти от традиции и комментарии в программе буду писать не до или после листинга - а в самом тексте её.
package up7; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.imageio.*; import javax.swing.*; public class Up7 extends JFrame { public static Up7 app; private TrayIcon iconTr; private SystemTray sT = SystemTray.getSystemTray(); public boolean chetTray = false; //переменная, чтобы был вывод сообщения в трее только при первом сворачивании public Up7() throws IOException { super("Демонстрация сворачивания в трей"); iconTr = new TrayIcon(ImageIO.read(new File("Ikonka.png")), "Демонстрация сворачивания в трей"); //Ikonka.png - изображение, которое будет показываться в трее - картинка в каталоге исполняемого приложения iconTr.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { setVisible(true); setState(JFrame.NORMAL); removeTr(); } }); //обработчик мыши MouseListener mouS = new MouseListener() { public void mouseClicked(MouseEvent ev) { } public void mouseEntered(MouseEvent ev) { } public void mouseExited(MouseEvent ev) { } public void mousePressed(MouseEvent ev) { } public void mouseReleased(MouseEvent ev) {} }; iconTr.addMouseListener(mouS); MouseMotionListener mouM = new MouseMotionListener() { public void mouseDragged(MouseEvent ev) { } //при наведении public void mouseMoved(MouseEvent ev) { boolean flg = false; iconTr.setToolTip("Двойной щелчок - развернуть"); } }; iconTr.addMouseMotionListener(mouM); addWindowStateListener(new WindowStateListener() { public void windowStateChanged(WindowEvent ev) { if(ev.getNewState() == JFrame.ICONIFIED) { setVisible(false); addTr(); } } }); } // метод удаления из трея private void removeTr(){ sT.remove(iconTr);} // метод добавления в трей private void addT() { try{ sT.add(iconTr); if (chetTray==false) { iconTr.displayMessage("Демонстрация сворачивания в трей", "Программа свернулась", TrayIcon.MessageType.INFO); } chetTray = true; } catch(AWTException ex) { ex.printStackTrace(); } } public static void main(String[] args) throws IOException { app = new Up7 (); app.setVisible(true); app.setAlwaysOnTop(true); app.setSize(777, 777); //обработчик основного окна - здесь необходимо перечислить все возможные действия - раз взялись обрабатывать, надо делать до конца :) app.addWindowListener(new WindowListener() { public void windowClosing(WindowEvent winEvent) { System.exit(0);//при закрытии окна завершаем программу } public void windowActivated(WindowEvent winEvent) {} public void windowClosed(WindowEvent winEvent) {} public void windowDeactivated(WindowEvent winEvent) {} public void windowDeiconified(WindowEvent winEvent) {} public void windowIconified(WindowEvent winEvent) {} public void windowOpened(WindowEvent winEvent) {} }); } }Именно таким образом можно свернуть приложение на Java в трей, развернуть его двойным щелчком, установить другие дополнительные параметры, а бонусом - сделать так, чтобы оно было поверх других окон в развернутом состоянии. Если у вас имеются комментарии, вопросы, предложения или другие жалобы, то пишите up777up@yandex.ru - я на все отвечу, выполню для вас заказ на java или напишу программу - и все это за весьма скромное вознаграждение.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.