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 :

Fermer une JDialog automatiquement


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut Fermer une JDialog automatiquement
    Bonjour

    J'ai un peu honte mais je galère sur ce problème surement tout simple à résoudre. Je souhaite à partir d'un JButton d'une JFrame ouvrir une JDialog et la fermer automatiquement au bout de 2s

    Voilà ce que je fais dans mon actionPerformed:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FenetreMessageFrame dialog = new FenetreMessageFrame(this, "msg", true,
            "Aucun Document Selectionné !!!", "");
    dialog.dispose();
    et dans ma JDialog
    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
     
        public FenetreMessageFrame( JFrame a, String b, boolean c, String texte1, String texte2)
        {
            super(a,b,c); setUndecorated(true); setSize(600, 200); setLocationRelativeTo(a);
     
    /*
     
    etc
     
     
    */
     
            setVisible(true);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(FenetreMessageFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            this.setVisible(false);
       }
    D'ou vient le probleme ?
    Merci

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setVisible(false);
    utilise plutôt la méthode dispose();

    Pourquoi FenetreMessageFrame n'extends pas JDialog?

    Et enfin :
    D'ou vient le probleme ?
    Mais quel est le problème ?

    La JDialog ne s'affiche pas? Ou elle s'affiche mais ne se ferme pas?

  3. #3
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Autant pour moi

    Le probleme est que je n'arrive pas à fermer cette jdialog automatiquement

    je te remet le code en entier j'ai ajouter un jbutton en attendant pour pouvoir tout de meme la fermer

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    class FenetreMessageFrame extends JDialog implements ActionListener
    {
        private DesignFenetreJDialog image;
        private JLabel LAB_Texte1, LAB_Texte2;
        private DesignBoutonLigne1 BOU_OK;
     
        public FenetreMessageFrame( JFrame a, String b, boolean c, String texte1, String texte2)
        {
            super(a,b,c); setUndecorated(true); setSize(600, 200); setLocationRelativeTo(a);
     
            image = new DesignFenetreJDialog("boisUnis.png", this); add(image);
            image.setLayout(new BorderLayout(5,5));
            image.setBorder(BorderFactory.createLineBorder(Color.black, 2));
     
            //Titre du Dialogue
            JLabel LAB_Titre = new JLabel("Informations"); LAB_Titre.setOpaque(true);
            LAB_Titre.setBackground(new Color(0x3c3c3e));
            LAB_Titre.setForeground(Color.white);
            LAB_Titre.setFont(new Font("serif", Font.BOLD, 22));
            LAB_Titre.setHorizontalAlignment(SwingConstants.CENTER);
            LAB_Titre.setBorder(BorderFactory.createLineBorder(Color.black, 2));
            LAB_Titre.setPreferredSize(new Dimension(
                    image.getWidth(),
                    (int) (getHeight() * 0.2)));
            image.add(LAB_Titre, BorderLayout.NORTH);
     
            //Panneau du Centre
            JPanel PAN_Centre = new JPanel(); PAN_Centre.setOpaque(false);
            PAN_Centre.setPreferredSize(new Dimension(
                    getWidth(), 
                    (int) (getHeight() * 0.6)));
            image.add(PAN_Centre, BorderLayout.CENTER);
            PAN_Centre.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
            //Texte1
            LAB_Texte1 = new JLabel(texte1); 
            LAB_Texte1.setPreferredSize(new Dimension(
                    PAN_Centre.getPreferredSize().width,
                    (int) (PAN_Centre.getPreferredSize().height * 0.2)));
            LAB_Texte1.setForeground(new Color(0xab3005));
            LAB_Texte1.setFont(new Font("Serif",Font.BOLD,19));
            LAB_Texte1.setHorizontalAlignment(SwingConstants.CENTER);
            PAN_Centre.add(LAB_Texte1);
            //Texte2
            LAB_Texte2 = new JLabel(texte2);
            LAB_Texte2.setPreferredSize(new Dimension(
                    PAN_Centre.getPreferredSize().width,
                    (int) (PAN_Centre.getPreferredSize().height * 0.2)));
            LAB_Texte2.setFont(new Font("Serif",Font.BOLD,19));
            LAB_Texte2.setHorizontalAlignment(SwingConstants.CENTER);
            PAN_Centre.add(LAB_Texte2);
     
            //Validation
            BOU_OK = new DesignBoutonLigne1("frene.png", 
                    (int) (PAN_Centre.getPreferredSize().width * 0.37),
                    (int) (PAN_Centre.getPreferredSize().height * 0.35),
                    "OK");
            BOU_OK.setPreferredSize(new Dimension(
                    (int) (PAN_Centre.getPreferredSize().width * 0.37),
                    (int) (PAN_Centre.getPreferredSize().height * 0.35)));
            BOU_OK.addActionListener(this);
            PAN_Centre.add(BOU_OK);
     
            //Panneau en bas
            JPanel PAN_Sud = new JPanel(); PAN_Sud.setOpaque(true);
            PAN_Sud.setBackground(new Color(0x3c3c3e));
            PAN_Sud.setBorder(BorderFactory.createLineBorder(Color.black, 2));
            PAN_Sud.setPreferredSize(new Dimension(
                    image.getWidth(),
                    (int) (getHeight() * 0.2)));
            image.add(PAN_Sud, BorderLayout.SOUTH);
     
            this.setVisible(true);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(FenetreMessageFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            this.setVisible(false);
     
        }
        public void actionPerformed(ActionEvent e)      {   setVisible(false);  }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FenetreMessageFrame dialog = new FenetreMessageFrame(this, "mail", true,
            "Aucun Document Selectionné !!!", "");
    dialog.dispose();

  4. #4
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Utilise un invokeLater lors de la création de ta fenêtre, sinon ça bloque les actions de l'application.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FenetreMessageFrame dialog = new FenetreMessageFrame(this, "mail", true,
            "Aucun Document Selectionné !!!", "");//L'application reste bloqué ici tant que la JDialog est ouverte
    dialog.dispose();//N'ai pas pris en compte
    Et pour le temps de 2s, utilise un timer. C'est bien plus simple à utiliser pour ce genre de chose.
    Et pour toi ça ne marchait pas parce que tu fais la pause après le this.setVisible(true);
    Or le setVisible bloque aussi l'application, tout ce qui est écrit après n'est pas pris en compte. ( en gros )


    Un petit exemple de ce que ça donne au final :
    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
    31
    32
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
     
    public class Dialog extends JDialog implements ActionListener
    {
     
        private Timer t;
        public Dialog( JFrame a, String b, boolean c)
        {
            super(a,b,c);
            t = new Timer(2000,this);
            t.start();
            this.setVisible(true);
        }
     
        public void actionPerformed(ActionEvent e){
            t.stop();
            this.dispose();
        }
     
        public static void main(String[] args){
     
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                     JFrame f = new JFrame();
                     f.setVisible(true);               
                     Dialog dialog = new Dialog(f, "mail", true);              
                }
            });
        }
    }

  5. #5
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Merci ca fonctionne à la perfection

    Il fallait que j'utilise un timer pour fermer la fenetre plutot qu'un thread.sleep


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

Discussions similaires

  1. (debian,eclipse) fermer une JDialog
    Par olivier57b dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 31/03/2009, 23h56
  2. Fermer une fenetre automatiquement dés validation formulaire
    Par bilou95 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 28/01/2008, 16h45
  3. Fermer une JDialog modale à partir d'un bouton contenu dans un JPanel
    Par Alqualonde dans le forum Agents de placement/Fenêtres
    Réponses: 18
    Dernier message: 02/03/2007, 14h20
  4. Fermer une forme automatiquement
    Par MiJack dans le forum Delphi
    Réponses: 4
    Dernier message: 02/08/2006, 09h19
  5. peut on fermer une JFrame automatiquement?
    Par zorm dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 22/11/2005, 16h12

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