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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, java, трей




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 2. C# комментарии
Урок 5. Оператор SELECT
Урок 7. Перегрузка конструктора в C#