2011-11-21 9 views
6

Voglio creare un'istanza JFrame e sul clic del suo minimize button, vorrei nasconderlo allo System Tray che di solito è lo taskbar di Windows.Come intrappolare la finestra riducendo al minimo l'evento?

Mi piacerebbe sapere che usando la classe SystemTray nel pacchetto java.awt posso farlo ma non ci sono tutorial né esempi di programmi di lavoro.

Avevo posto questa domanda per ottenere il collegamento al sito tutorial per la classe SystemTray o se un corpo sa come intrappolare la finestra che minimizza l'evento, un esempio funzionante.

+2

forse entrambi i link aiuteranno http://download.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html e http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ – HRgiger

risposta

4

Ciò intercetterà l'evento minimizzato finestra e creerà un'icona di vassoio. Rimuoverà anche la finestra dalla barra delle applicazioni e aggiungerà un listener sull'icona del vassoio in modo che un cliché possa ripristinare la finestra. Il codice è un po 'sconnesso, ma dovrebbe essere abbastanza buono per i vostri scopi di apprendimento:

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

L'interfaccia WindowListener e s' addWindowListener() metodo dovrebbe aiutare a determinare quando il telaio è stato minimizzato JFrame.

+0

+1, addetto alle pulizie .... –

2

modo migliore sarebbe quello di creare segue

1) SystemTray

2) aggiungere JPopopMenu alla SystemTray's Icon

3) set DefaultCloseOperation per TopLevelContainer (nel tuo caso JFrame)

  • utilizzando WindowListenersetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  • in altri casi funziona sempre setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

  • preavviso non dimenticate di dichiarare System.exit(1) al SystemTray's JpopupMenu, da JMenuItem o di un altro Action/Event, perché in questa forma currenet JVM mai andato dal sistema operativo nativo fino a quando il PC non si spegne o si riavvia

+0

grazie per la spiegazione passo-passo. –

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