2011-07-03 19 views
9

Me gustaría que mi programa muestre un ícono en el Área de estado de la Barra de tareas cercana al reloj en Windows y encuentre una manera de hacerlo.Ocultar mi programa en la Bandeja del sistema en Windows

El asunto es que me gustaría que mi programa permanezca abierto en el Área de estado si se presiona la "X" en la ventana, pero no en la bandeja del sistema, pero no tengo ni idea de cómo hacerlo y buscar en Google no ayudó (probablemente no estoy buscando los términos correctos).

Editar: Creo que utilicé términos incorrectos. Sé cómo tener el icono de mi programa en el área de notificación, lo que me gustaría es ocultarlo en el área donde normalmente se muestra cuando minimizas una ventana.

+0

El nombre oficial de la _system tray_ es el _notification area_ (ver [aquí] (http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx)). Eso podría ayudar a tu búsqueda. – user786653

+0

@ user786653 Curiosamente, incluso si la implementación de Java va bajo la bandeja del sistema de nombres. Esa es una lucha que Raymond y compañía acaban de perder: junto con su guía oficial, cómo usarla (que es algo bueno) – Voo

+0

Voo: la implementación de Java funciona en más sistemas que solo Windows y otros administradores de ventanas adoptaron el término »sistema bandeja «... – Joey

Respuesta

7

Sé cómo tener el icono de mi programa en el área de notificación, lo que me gustaría es ocultarlo en el área donde normalmente se muestra cuando se minimiza una ventana.

Luego, no use la bandeja del sistema.

La cosa es que me gustaría que mi programa para permanecer abierto en el área de estado si se pulsa la "X" en la ventana,

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
+0

Gracias. No estaba viendo los métodos correctos. Supongo que debería haber pensado que al hacerlo invisible no lo ocultaría. –

2

supongo que desea que el botón de barra de tareas para ser retirado cuando minimiza el formulario principal. Lo logras acariciando su propiedad visible a falso, sin embargo lo haces con tu framework Java.

4
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.UIManager; 

public class HideToSystemTray extends JFrame { 
    TrayIcon trayIcon; 
    SystemTray tray; 
    JButton button; 

    HideToSystemTray() { 
     super("SystemTray test"); 
     button = new JButton("Press"); 
     button.setBounds(10, 10, 40, 40); 
     setUndecorated(true); 
     getContentPane().add(button); 
     System.out.println("creating instance"); 
     try { 
      System.out.println("setting look and feel"); 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } catch (Exception e) { 
      System.out.println("Unable to set LookAndFeel"); 
     } 
     if (SystemTray.isSupported()) { 
      System.out.println("system tray supported"); 
      tray = SystemTray.getSystemTray(); 

      Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png"); 
      ActionListener exitListener = new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("Exiting...."); 
        System.exit(0); 
       } 
      }; 
      PopupMenu popup = new PopupMenu(); 
      MenuItem defaultItem = new MenuItem("Exit"); 
      defaultItem.addActionListener(exitListener); 
      popup.add(defaultItem); 
      defaultItem = new MenuItem("Open"); 
      defaultItem.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        tray.remove(trayIcon); 
        setVisible(true); 
        System.out.println("Tray icon removed"); 
       } 
      }); 
      popup.add(defaultItem); 
      trayIcon = new TrayIcon(image, "SystemTray Demo", popup); 
      trayIcon.setImageAutoSize(true); 
     } else { 
      System.out.println("system tray not supported"); 
     } 

     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       //Execute when button is pressed 
       System.out.println("You clicked the button"); 
       try { 
        tray.add(trayIcon); 
        setVisible(false); 
        System.out.println("added to SystemTray"); 
       } catch (AWTException ex) { 
        System.out.println("unable to add to tray"); 
       } 
      } 
     }); 


    /* addWindowStateListener(new WindowStateListener() { 
    public void windowStateChanged(WindowEvent e) { 
     if(e.getNewState()==ICONIFIED){ 
      try { 
       tray.add(trayIcon); 
       setVisible(false); 
       System.out.println("added to SystemTray"); 
      } catch (AWTException ex) { 
       System.out.println("unable to add to tray"); 
      } 
     } 
     if(e.getNewState()==7){ 
      try{ 
       tray.add(trayIcon); 
       setVisible(false); 
       System.out.println("added to SystemTray"); 
      }catch(AWTException ex){ 
       System.out.println("unable to add to system tray"); 
      } 
     } 
     if(e.getNewState()==MAXIMIZED_BOTH){ 
      tray.remove(trayIcon); 
      setVisible(true); 
      System.out.println("Tray icon removed"); 
     } 
     if(e.getNewState()==NORMAL){ 
      tray.remove(trayIcon); 
      setVisible(true); 
      System.out.println("Tray icon removed"); 
     } 
    } 
    }); */ 
    setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png")); 

    setVisible(true); 
    setSize(300, 200); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public static void main(String[] args) { 
    new HideToSystemTray(); 
} 
} 
+1

Agregue algunos detalles sobre el código y por qué comentó una gran parte de él para que sea más fácil para otras personas entenderlo –

Cuestiones relacionadas