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 :

Comment faire passer une fenêtre JOptionPane au premier plan?


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Comment faire passer une fenêtre JOptionPane au premier plan?
    Bonjour,

    Pour faire apparaitre un message j'utilise l'instruction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JOptionPane.showMessageDialog(
       null,
       monMessage,
       monTitre,
       JOptionPane.INFORMATION_MESSAGE);
    Le problème c'est que mon message apparait derrière la fenêtre courante. Pouvez-vous me dire comment faire pour qu'il apparaisse au premier plan?

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Tu dois spécifier la fenêtre parente à la méthode showMessageDialog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JOptionPane.showMessageDialog(
    maFenetre,
    monMessage,
    monTitre,
    JOptionPane.INFORMATION_MESSAGE);
    Bonne chance.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Seulement, je n'ai pas de fenêtre, car pas d'interface graphique, c'est juste un message d'information qui s'affiche.

    J'ai essayé
    JFrame f = new JFrame;
    JOptionPane.showMessageDialog(
    f,
    monMessage,
    monTitre,
    JOptionPane.INFORMATION_MESSAGE);

    mais ça ne fait pas apparaitre ma fenêtre au premier plan.

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Tu peux essayer de récupérer l'instance de l'OptionPane crée, et de lui appliquer la méthode toFront(). Sinon, tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JFrame f = new JFrame();
    f.toFront();
    JOptionPane.showMessageDialog(
    f,
    monMessage,
    monTitre,
    JOptionPane.INFORMATION_MESSAGE);
    Mais je ne suis pas sûr que cela fonctionnera. Bonne chance.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Malheureusement il n'y a pas de méthode toFront() dans JOptionPane.

    f.toFront() ne fait pas passer mon message au premier plan non plus...

    C'est incroyable, il n'y aurait aucun moyen de faire ça en Java?

  6. #6
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Malheureusement, je ne crois pas. Je pense que cela est dû que ce genre d'opération est lié au système d'exploitation, par conséquent, Java, pour être portable, délègue le travail au système d'exploitation. Des méthodes comme toFront vont marcher sur certains OS, mais pas sur d'autres. Je dis peut être des bétises, mais il me semble que c'est ça. a confirmer donc.

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Romz31 Voir le message
    Le problème c'est que mon message apparait derrière la fenêtre courante.
    Et quel est cette fenêtre courante ?

    a++

  8. #8
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Pour info :

    Citation Envoyé par Javadoc
    public void toFront()

    If this Window is visible, brings this Window to the front and may make it the focused Window.

    Places this Window at the top of the stacking order and shows it in front of any other Windows in this VM. No action will take place if this Window is not visible. Some platforms do not allow Windows which own other Windows to appear on top of those owned Windows. Some platforms may not permit this VM to place its Windows above windows of native applications, or Windows of other VMs. This permission may depend on whether a Window in this VM is already focused. Every attempt will be made to move this Window as high as possible in the stacking order; however, developers should not assume that this method will move this Window above all other windows in every situation.

    Because of variations in native windowing systems, no guarantees about changes to the focused and active Windows can be made. Developers must never assume that this Window is the focused or active Window until this Window receives a WINDOW_GAINED_FOCUS or WINDOW_ACTIVATED event. On platforms where the top-most window is the focused window, this method will probably focus this Window, if it is not already focused. On platforms where the stacking order does not typically affect the focused window, this method will probably leave the focused and active Windows unchanged.

    If this method causes this Window to be focused, and this Window is a Frame or a Dialog, it will also become activated. If this Window is focused, but it is not a Frame or a Dialog, then the first Frame or Dialog that is an owner of this Window will be activated.

    If this window is blocked by modal dialog, then the blocking dialog is brought to the front and remains above the blocked window.

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,



    Et quel est cette fenêtre courante ?

    a++
    Une fenêtre windows (Mon navigateur web en fait).

    Tu as une idée sur la question?

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Romz31 Voir le message
    Une fenêtre windows (Mon navigateur web en fait).
    Tu es dans une applet ou ton application tourne en tâche de fond ??

    a++

  11. #11
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Mon appli tourne en tâche de fond.

    Bon au pire j'ai toujours la solution de faire une JFrame en faisant moi même le label et le bouton ok, mais c'est un peu moche...

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Romz31 Voir le message
    Mon appli tourne en tâche de fond.
    Et je suppose que tu es sous Windows...

    En effet sous Windows tu ne peux pas mettre une fenêtre/boite de dialogue au premier plan si l'application n'a pas la main !

    La solution si tu utilises Java 5.0 serait d'utiliser setAlwaysOnTop() sur ton dialog. Le problème c'est que pour cela tu dois manipuler le JOptionPane à la main, par exemple :
    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
    	public static int showMessageDialog(String title, Object message) {
    		// On crée le JOptionPane :
    		JOptionPane pane = new JOptionPane(message, JOptionPane.INFORMATION_MESSAGE);
     
    		// On crée la boite de dialogue correspondante :
    		JDialog dialog = pane.createDialog(null, title);
    		// Que l'on met "toujours dessus" :
    		dialog.setAlwaysOnTop(true);
     
    		// On affiche puis on détruit le dialog :
    		dialog.setVisible(true);
    		dialog.dispose();
     
    		// On traite les valeurs par défaut :
    		Object selectedValue = pane.getValue();
    		if (selectedValue == null)
    			return JOptionPane.CLOSED_OPTION;
     
    		if (selectedValue instanceof Integer)
    			return ((Integer) selectedValue).intValue();
    		return JOptionPane.CLOSED_OPTION;
    	}
    a++

  13. #13
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Ok, je vais faire avec setAlwaysOnTop().

    Merci bcp, je l'aurais pas inventé!

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

Discussions similaires

  1. [Débutant] Comment faire passer une fenêtre d'application active au 1er plan
    Par guillaume.niel dans le forum VB.NET
    Réponses: 4
    Dernier message: 08/12/2012, 23h28
  2. Comment faire passer une variable en plus d'un formulaire
    Par frisouille12 dans le forum Langage
    Réponses: 1
    Dernier message: 06/08/2009, 15h06
  3. Réponses: 2
    Dernier message: 26/09/2007, 16h45
  4. Comment faire fonctionner une fenêtre Login
    Par Cazaux-Moutou-Philippe dans le forum WinDev
    Réponses: 3
    Dernier message: 29/10/2006, 12h00
  5. Réponses: 2
    Dernier message: 13/12/2004, 15h16

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