2010-11-20 32 views
1

J'écris un programme basé sur Java Swing utilisant JFrame et capable d'afficher une icône de barre d'état système pour un accès rapide aux fonctions les plus utilisées. Maintenant, je veux ajouter une option permettant à l'utilisateur de choisir si l'icône normale de la barre des tâches (Windows) doit être affichée lorsque la fenêtre du programme est réduite.Comment activer dynamiquement ou désactiver l'icône de la barre des tâches pour un programme Java Swing

Une recherche dans Google m'a dit que je peux utiliser JDialog au lieu de JFrame. Malheureusement, ce n'est pas une bonne solution dans mon cas, car je veux activer ou désactiver dynamiquement l'icône de la barre des tâches en fonction de la décision de l'utilisateur.

Est-ce possible?

Merci et Sincères salutations, Matthias

Répondre

0

Quelque chose à essayer, même si je ne suis pas entièrement sûr que cela fonctionnera car il est tard et je pense peut-être à tort. Lorsque vous réduisez une fenêtre, un événement est déclenché, ce que vous voulez faire est de l'attraper en ajoutant un WindowStateListener au JFrame qui surveille WINDOW_ICONIFIED et WINDOW_DEICONIFIED. Lorsque WINDOW_ICONIFIED se produit, définissez la propriété visible du JFrame sur false; lorsque WINDOW_DEICONIFIED le définit sur true. Un test rapide de définition d'une visibilité de cadres sur false a semblé l'enlever de la barre des tâches, tout ce que vous avez à faire est de savoir si cela fonctionne réellement et ensuite implémenter un listener d'état.

Voici le code que j'utilisé pour tester

import java.awt.*; 

public class FrameTest 
{ 
    public static void main (String args[]) throws Exception 
    { 
     // Create a test frame 
     Frame frame = new Frame("Hello"); 
     frame.add (new Label("Minimize demo")); 
     frame.pack(); 

     // Show the frame 
     frame.setVisible (true); 

     // Sleep for 5 seconds, then minimize 
     Thread.sleep (5000); 
     frame.setState (Frame.ICONIFIED); 
     frame.setVisible(false); 
     // Sleep for 5 seconds, then restore 
     Thread.sleep (5000); 
     frame.setState (Frame.NORMAL); 
     frame.setVisible(true); 

     // Sleep for 5 seconds, then kill window 
     Thread.sleep (5000); 
     frame.setVisible (false); 
     frame.dispose(); 

     // Terminate test 
     System.exit(0); 
    } 
} 
+0

le problème est ici que, dans ce cas, si la fenêtre JFrame est réduite au minimum, il reste l'icône dans la barre des tâches, est-ce pas? Mais je veux enlever toute l'icône (entrée) de la barre des tâches dès que la fenêtre est réduite ... – Matthias

+0

Je viens de l'essayer avec un ancien programme que j'avais installé et qui a fonctionné. J'ai mis la propriété de visibilité jframes à false, ie. frame.setVisible (false); et il n'est plus apparu dans la barre des tâches. Pour faire cela sur minimiser, vous devrez écouter un changement d'état, ce qui est différent alors j'ai dit (le mien étant pré 1.4) mais c'est assez facile à chercher. Lorsque vous restaurez la fenêtre, vous venez de définir Vrai (true) et vous êtes prêt à recommencer. – phill

+0

ok alors, je vais essayer, merci! – Matthias

2

Un JDialog ou JFrame est juste un conteneur. Le changement entre eux ne fonctionnerait pas pour votre situation? Lorsque vous avez besoin de basculer, créez simplement une nouvelle instance de l'autre type avec le même emplacement et la même taille, et déplacez le contentPane.