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

Java Discussion :

Bloquer le cours normal du programme


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut Bloquer le cours normal du programme
    Bonjour,

    j'essaie de programmer un JPanel, qui lorsqu'il est affiché, bloque le traitement de la méthode qui a demandé son affichage.
    Ceci doit être maintenu tant que l'utilisateur n'a pas appuyé sur un bouton spécifique du JPanel.
    C'est un peu comme si ce JPanel était modal, ou faisait office d'une JOptionPane
    L'architecture ressemble un peu à çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class maClassePrincipale()
    {
      cPanelModal lePanel = new cPanelModal();
     
      blabli blabla
     
      /.../
     
      lePanel.affichePanelModal();
      /.../
    }
    Ailleurs, la classe du JPanel:
    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
    24
    25
    26
    27
    28
    29
    30
    public class cPanelModal extends JPanel
    {
      boolean reponse_actionnee;
      /.../
     
      public void affichePanelModal()
      {
        // Traitement pour l'affichage des composants du panel
        /.../
     
        reponse_actionnee = false;
     
        do {} // Boucle de blocage d'attente de réponse
        while( !reponse_actionnee );
      }
     
      /.../
     
      private class ActionBoutonReponse extends AbstractAction
      {
        /.../
     
        @overide
        public vois actionPerformed( ActionEvent AE )
        {
          /.../
          reponse_actionnee = true; // Débloquera la boucle d'attente de réponse
        }
      }
    }
    Evidemment, la boucle do/While bloque tout, y compris le traitement au sein de la classe du panneau modal.
    Je cherche du côté des Thread et Cie, des InvokeLater() et autres..., pas moyen de trouver mon bonheur.
    Y a-t-il une solution ?

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    JOptionPane s'appuie sur JDialog dont le constructeur prend en parametre... un boolean modal

    Donc en utilisant un JDialog et en y incluant ton JPanel, ca devrait marcher.

    Un exemple simple :
    http://www.java2s.com/Tutorial/Java/...odalDialog.htm

    a+

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Pourquoi ne pas utiliser un JDialog ?

    EDIT : grilled
    Dire que j'ai fait un "refresh" pour être sûr que personne n'avait répondu
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    merci pour vos réponses, mais je m'aperçois que je n'ai pas été assez précis dans ma question.
    Je ne veux pas utiliser une JOptionPane car je veux afficher un JPanel sur l'ensemble de la zone de mon application. Celui-ci est dessiné avec des effets graphiques... bref cela sort du sujet du post.

    Je voudrais simplement faire en sorte que tant que ce JPanel est affiché, il prend le contrôle du déroulement du programme, comme le ferait une JOptionPane de type modal.

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Comme ça trois options :

    1. Jouer avec le focus manager pour interdire des changements de focus vers un composant en dehors de ton JPanel
    2. Rendre la fenêtre contenante alwaysOnTop
    3. Rendre la dialogue contenante application (ou toolkit) modal
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Ceci dit je vois pas trop de différence avec une JDialog non décorée ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

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

Discussions similaires

  1. Cours sur le programme DEBUG de MS-DOS
    Par Med_be dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 24/02/2011, 19h18
  2. bloquer l'acces a certains programmes
    Par isoman dans le forum Windows
    Réponses: 6
    Dernier message: 15/01/2009, 12h40
  3. cours d'algorithme /programmation
    Par bidule123456 dans le forum Etudes
    Réponses: 6
    Dernier message: 08/08/2007, 17h52

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