2011-11-21 31 views
6

Quiero crear una instancia de JFrame y en el clic de su minimize button, me gustaría ocultarlo en el System Tray que es generalmente el taskbar de windows.Cómo atrapar el evento de minimizar ventana?

Llegué a saber que al utilizar la clase SystemTray en el paquete java.awt puedo hacerlo, pero no recibo ningún tutorial ni ningún otro ejemplo de programa de trabajo.

He hecho esta pregunta aquí para obtener el enlace al sitio tutorial para la clase SystemTray o si algún cuerpo sabe cómo atrapar el evento de minimizar la ventana, un ejemplo de trabajo.

+2

quizás ambos enlaces ayuden http://download.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html y http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ – HRgiger

Respuesta

4

Esto atrapará el evento minimizado de ventana y creará un icono de bandeja. También eliminará la ventana de la barra de tareas y agregará un oyente en el icono de la bandeja para que un clic en el mouse restaure la ventana. El código es un poco rudimentario, pero debe ser lo suficientemente bueno para sus propósitos de aprendizaje:

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); 
} 

} 
5

La interfaz WindowListener y JFrame 's addWindowListener() método debe ayudar a determinar cuando la trama se ha minimizado.

+0

+1, limpiador .... –

2

mejor manera sería crear sigue

1) SystemTray

2) añadir JPopopMenu a la SystemTray's Icon

3) establecer DefaultCloseOperation para TopLevelContainer (en su caso JFrame)

  • utilizando WindowListenersetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  • en otros casos siempre funciona setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

  • notificación no se olvide declarar System.exit(1) a la SystemTray's JpopupMenu, desde JMenuItem u otra Action/Event, ya que de esta forma currenet JVM nunca se ha ido desde el sistema operativo nativo hasta el apagado o reinicio de la PC

+0

gracias por la explicación paso a paso. –

0
frame.addWindowListener(new WindowAdapter() {@Override 
    public void windowIconified(WindowEvent e) {} 
}); 
Cuestiones relacionadas