IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Garder une fenetre au premier plan par rapport aux fenetres du meme programme


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Garder une fenetre au premier plan par rapport aux fenetres du meme programme
    Bonjour,

    Je suis en train de faire un programme Java (mon premier), utilisant des JFrame et des JDialog, sous netbeans.

    Au demarrage du programme, la fenetre principale (JFrame) s'ouvre. Elle contient differents boutons permettant d'afficher des fenetres secondaires (JDialog). Celles-ci n'apparaissent pas dans la barre des taches, et je voudrais donc les laisser devant la fenetre principale, des que le programme est actif, et jusqu'a leur fermeture.
    Je ne peux pas utiliser "always on top", car je veux au'un autre programme puisse passer au premier plan. C'est uniquement quand mon programme est actif que les JDialog doivent etre devant

    Pour le moment, j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    /******************************/
    /* Ouverture des JDialog */
    /******************************/
     
    private void jButton_RiseTransitSetTimeActionPerformed(java.awt.event.ActionEvent evt) {                                                           
    // TODO add your handling code here:
            GlobalVariables.RiseTransitSetTimeWindow = new Rise_Transit_SetTimes(new GMRTobservation(), false);
            GlobalVariables.RiseTransitSetTimeWindow.setVisible(true);
            this.setEnabled(false);
        }                                                          
     
        private void jButton_CreateCmdFileActionPerformed(java.awt.event.ActionEvent evt) {                                                      
    // TODO add your handling code here:
            GlobalVariables.commandFileWindow1 = new createCmdFile_obsSetup(new GMRTobservation(), false);
            GlobalVariables.commandFileWindow1.setVisible(true);
            this.setEnabled(false);
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    /********************************************************************************************/
    /* Passage au 1er plan des JDialogs, en cas de retour sur la fenetre principale */
    /********************************************************************************************/
     
    private void formWindowGainedFocus(java.awt.event.WindowEvent evt) {                                       
    // TODO add your handling code here:
            //If another window of this program is open, it will be set at top level
     
            if (GlobalVariables.commandFileWindow1.isShowing()){
                    GlobalVariables.commandFileWindow1.setVisible(false);
                    GlobalVariables.commandFileWindow1.setVisible(true);
                    //While another window is open, the main window is disabled
                    this.setEnabled(false);
            }
            else if(GlobalVariables.RiseTransitSetTimeWindow.isShowing()){
                GlobalVariables.RiseTransitSetTimeWindow.setVisible(false);
                GlobalVariables.RiseTransitSetTimeWindow.setVisible(true);
                //While another window is open, the main window is disabled
                this.setEnabled(false);
            }
     
        }
    Dans chaque JDialog, je reactive la fenetre principale a la perte du focus, pour lui permettre de prendre le focus quand elle passe au premier plan, et ainsi d'executer le code ci-dessous.

    Je pense qu'il y a beaucoup plus simple que ca, mon code est un peu long pour une action plutot basique a mon avis.

    Par contre, je ne comprend pas pourquoi, dans le deuxieme code, si le premier if echoue, les autres ne sont pas executes, au moment ou je lance le programme.
    Le code fonctionne donc pour la premiere fenetre, mais pas pour les autres.
    En fait, il faut que j'ai valide au moins une fois toutes les conditions precedentes, pour acceder au test de la suivante (dans le code que j'ai mis, il n'y a qu'un if et un else if, donc il faut que le if ait ete valide une fois pour acceder au test du else if).

    Quelqu'un comprend pourquoi ou a une solution plus simple?

    Merci d'avance pour votre aide.

    (Desole pour les accents, je suis a l'etranger, et j'ai un clavier qwerty)

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Il suffit de déclarer ton JDialog en modal.

    http://java.sun.com/javase/6/docs/ap...ing,%20boolean)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    Merci pour ta réponse.

    Cependant, c'est ce que j'avais fait au départ, avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /******************************/
    /* Ouverture des JDialog */
    /******************************/
     
    private void jButton_RiseTransitSetTimeActionPerformed(java.awt.event.ActionEvent evt) {                                                           
    // TODO add your handling code here:
            maJdialog1 RiseTransitSetTimeWindow = new Rise_Transit_SetTimes(new GMRTobservation(), true);
            RiseTransitSetTimeWindow.setVisible(true);
        }                                                          
     
        private void jButton_CreateCmdFileActionPerformed(java.awt.event.ActionEvent evt) {                                                      
    // TODO add your handling code here:
            maJdialog2 commandFileWindow1 = new createCmdFile_obsSetup(new GMRTobservation(), true);
            commandFileWindow1.setVisible(true);
        }
    La fenêtre principale est alors bien désactivée (impossible de cliquer sur les boutons), mais quand on clique dessus, elle passe quand même au premier plan, devant ma jDialog.

    Le problème c'est que vu que la jDialog n'apparait pas dans la barre des tâches il est parfois difficile de la retrouver (si elle est passée derrière d'autres fenêtres, il faut les réduire une par une).

    Je suis sous linux, et c'est une session Gnome, peut être que ça vient de là...

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    C'est parce que tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJdialog1 RiseTransitSetTimeWindow = new Rise_Transit_SetTimes(new GMRTobservation(), true);
    Tu crées un nouvel objet, ton dialogue sera modal par rapport à cet objet et non a la vrai frame parent.
    Il faut que tu mettes la référence de la frame parente et non que tu fasses un "new Chose".

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    OK, merci beaucoup, ça marche. C'est vrai que c'est plus logique comme ça, en fait, je recréais ma fenêtre principale à chaque fois, je sais pas pourquoi j'étais parti comme ça.

    Par contre, comment ça se fait que ma fenêtre était quand même bloquée?

  6. #6
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par CyberSlan Voir le message
    Par contre, comment ça se fait que ma fenêtre était quand même bloquée?
    La gestion de la modalité sous Java 1.5 et moins fait que toute l'application est bloquée dès qu'un dialogue modal est ouvert. A partir de Java 6 c'est possible de travailler plus finement mais ce n'est pas le cas par défaut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Shell au premier plan par rapport à application tierce
    Par polonain2 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 31/08/2012, 09h42
  2. Garder une application en premier plan
    Par thebarbarius dans le forum Débuter
    Réponses: 2
    Dernier message: 31/07/2011, 12h38
  3. [Débutant] garder une figure en premier plan
    Par Di-Ma dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 09/05/2010, 09h19
  4. Réponses: 20
    Dernier message: 12/02/2010, 14h35
  5. div parent au premier plan par rapport à ses fils?
    Par hamidap dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 27/03/2009, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo