2012-04-01 16 views
5

He visto desde here cómo usar la bandeja. Así lo uso de esta forma:Cómo poner la aplicación Java en Systemtray cuando el usuario hace clic en Cerrar ventanas

private void checkTray() throws IOException { 
    if (SystemTray.isSupported()) { 
     System.out.println("system tray supported"); 
     tray = SystemTray.getSystemTray(); 
     Image image = ImageIO.read(new FileInputStream(new File("logo.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) { 
       setVisible(true); 
       setExtendedState(JFrame.NORMAL); 
      } 
     }); 
     popup.add(defaultItem); 
     trayIcon = new TrayIcon(image, "SystemTray Demo", popup); 
     trayIcon.setImageAutoSize(true); 
    } 
    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() == WindowEvent.WINDOW_CLOSING){ 
       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() == 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"); 
      } 
     } 
    }); 
} 

y en el constructor:

this.setDefaultCloseOperation(JFrame.ICONIFIED); 

Cuando hago clic en cerrar las ventanas, mi solicitud no va a probar el sistema, pero se cierra en sí. ¿Cómo puedo resolverlo? ¿alguien me puede ayudar?

+0

Desde cuándo 'JFrame.ICONIFIED' se convierte en un valor de [setDefaultCloseOperation()] (http://docs.oracle.com/javase/6/docs/api/ javax/swing/JFrame.html # setDefaultCloseOperation (int)? WindowConstants http://docs.oracle.com/javase/6/docs/api/javax/swing/WindowConstants.html – ecle

+0

entonces tengo que usar Nothing_on_close? – JackTurky

+0

Sí, ya que desea 'establecerVisible (verdadero)' para hacer que el marco sea visible de nuevo. – ecle

Respuesta

4

resuelvo añadiendo esto:

this.addWindowListener(new WindowAdapter(){ 
public void windowClosing(WindowEvent windowEvent) { 
    setExtendedState(JFrame.ICONIFIED); 
    } 
}); 
+0

su código funciona perfectamente. Gracias. –

Cuestiones relacionadas