Je construis une Jdialog modal pour saisir du texte et quand je ferme cette fenetre par un dispose,ma JFrame qui a appelée cette JDialog ne recupere pas la main..J'aimerai savoir pourquoi?Merci d'avance..![]()
Je construis une Jdialog modal pour saisir du texte et quand je ferme cette fenetre par un dispose,ma JFrame qui a appelée cette JDialog ne recupere pas la main..J'aimerai savoir pourquoi?Merci d'avance..![]()
Ben là comme ça sans bout de code ni la moindre idée de ton contexte de fenêtres c'est pas évident de se faire une idée...
- Docteur j'ai mal la, qu'est ce que c'est ?
- Ben écoutez venez au cabinet parce que par téléphone j'ai du mal à voir où c'est "là" !!!![]()
Dans ma classe Dial qui étend JDialogue je fais appel auconstructeur de JDialog
super(vue,"Meilleurs Score",true);/*vue est ma JFRame qui appelle*/
Dans ma fenetre Dial j'ai un JTextField editable pour demander le nom de l'utilisteur,j'ai aussi fais un
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
Lorsque l'utilisateur appuie sur OK (JBouton ajouté) je fais les appels a dispose();
Apres ma fenetre Dial n'est plus affichée (logique.. 8) )mais ma JFrame vue est toujours bloquée..Voila j'espere que ca va mieux..Demande moi si tu veux que je te mettes plus de codes..Merci!!
Dial fenetre = new Dial(model,Vue.this); /*Vue étend JFrame*/
Cette instanciation est effectuée dans une méthode update apres avoir aouté un observer au model.Jespere que tu comprends tjs..(cest pour ca que je mets Vue.this)
Le constructeur de ma Dial est :
Je n'ai qun seul bouton..
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 class Dial extends JDialog implements ActionListener { public Dial(Simulateur model,Vue vue) { // Appel du constructeur de la classe JDialog super(vue,"Meilleurs Score",true); setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); setLocationRelativeTo(vue); //positionnement de mes differents bouton et JTextField pack(); show(); } public void actionPerformed(ActionEvent e) { dispose(); }
Voila un peu de code j'espere que ca te sera suffisant pour m'aider sinon je peux ten donner plus mais ca risque de faire lourd!!
Alors j'ai une solution détournée pour toi qui va nous éviter bien des ennuis. Je t'annonce que tu t'es sûrement cassé le cul pour rien à faire ta propre JDialog... désolé...
Il y a une classe utilitaire que trop peu de monde utilise et qui s'appelle JOptionPane. Ca te permet d'afficher tout un tas de boîtes de dialogues modales simples genre messages d'erreur ou comme ici, invite utilisateur...
Est-ce que cet appel ne te suffirait pas par exemple :
Au passage, un petit lien vers le tutoriel...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 String userName = JOptionPane.showInternalInputDialog(vue.getContentPane(), "Votre nom : ", "Identification", JOptionPane.QUESTION_MESSAGE);
Si ça ne te suffit pas comme boite de dialogue, essaie de remplacer vue par vue.getContentPane() dans ton appel au constructeur de JDialog (en Anglais c'est ce qu'on appelle une rule of thumb : j'ai jamais vraiment compris pourquoi ça marchait comme ça et pas autrement mais ça marche lol)
Je sais qu'elle existe cette classe car j'utilise des JOPtionPane pour demander confirmation.En fait j'ai fais une JDialog pour permettre a l'utilisateur de ne pouvoir appuyer que sur entree pour fermer cette fenetre ce qui nest pas possible pour une JOptionPane et jai aussi utiliser une JDialog pour ne pas lui permettre de rentrer une chaine vide ou une chaine trop longue..Tu llavais surement compris vu les noms cette affichage sert a demander le nom de l'utilisateur pour sauvegarder son score donc je ne veux ni un nom vide ni un nom trop long si tu as une autre solution qui m'offre les memes possibilités je suis preneur!!
Merci d'avance
Autant pour moi...Et en faisant une boucle qui réaffiche la boîte de dialogue tant que toutes les conditions ne sont pas réunies ça ne marche pas ?
Par contre pour le coup de la boite qui ne se ferme que sur Entrée, je ne vois pas trop l'intérêt en fait. Surtout qu'avec la méthode que je te suggère, si l'utilisateur utilise annuler ou le ch'tit bouton en haut à droite, la méthode showInternalInputDialog() retourne null et donc on boucle.
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 String userName = ""; boolean erreut = false; do{ userName = JOptionPane.showInternalInputDialog(vue.getContentPane(), "Votre nom : ", "Identification", JOptionPane.QUESTION_MESSAGE); erreur = userName == null || userName.length() == 0 || userName.length > MAX_LENGTH; if(erreur){ JOptionPane.showInternalMessageDialog(vue.getContentPane(), "Attention. Votre nom est soit trop court (0) soit trop long (>" + MAX_LENGTH+")", "Problème d'identification", JOptionPane.WARNING_MESSAGE); } } while(erreur);
Sinon tu as essayé simplement en remplaçant vue par vue.getContentPane() dans ton implémentation de JDialog ?
J'ai essayé avec getContentPane mais ca ne marche pas car getContentPane ne renvoit pas une Frame or le constructeur de Jdialog prend une Frame en premier argument..Merci de ton aide..
Je voudrais te dire un grand merci!!!Ta méthode marche et en plus utilise bcp moins de codes et elle est plus conviviale a utiliser..Encore Merci!!
A bientot!!
Partager