Problème avec les fenêtres modales

satokun Messages postés 9 Statut Membre -  
satokun Messages postés 9 Statut Membre -
salut à tous, j'espère que quelqu'un aura la réponse par ici:

je lance une fenêtre héritant de JDialog depuis la barre d'outils d'un JPanel, cette même fenêtre possède un boutton "recherche" pour lancer une JOptionPane qui récupère une chaine de caractères.
mon problème est le suivant:
quand je définis le JDialog comme "modal" la JOptionpane ne ce lance pas (rien ne s'affiche quand je clique sur "recherche"), par contre quand je la définis comme "non modal" la JOptionpane s'affiche normalement, mais cette manip ne m'aide pas trop dans mon application, donc je souhaite que mes deux fenêtres soient modales.

merci d'avance

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Bonjour,

"je souhaite que mes deux fenêtres soient modales."
Par définition, il ne peut y avoir qu'une fenêtre modale en même temps.

Tu peux par contre, désactiver la modalité de ta première fenêtre pour ouvrir une deuxième fenêtre qui devient modale, et une fois celle-ci fermée redonner la modalité à la première fenêtre.
0
satokun Messages postés 9 Statut Membre
 
salut KX,
j'ai essayé cette méthode auparavant, j'ai tenté de motifier la modalité de la fenêtre JDialog dans la methode "actionPerformed" du boutton recherche (qui lance la deuxième fenêtre modale) mais malheureusement (et bizzarement d'ailleurs) ça n'a pas marché
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Voici un exemple très simple de fenêtre modales imbriquées, j'ai choisi de prendre un niveau N quelconque (par exemple N=5) pour montrer que le code ne change pas quelque soit le niveau d'imbrication.

import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;

public class Test {

    public static void main(String[] args) {

        int N = 5;

        JDialog[] dialogs = new JDialog[N];

        dialogs[0] = new JDialog();
        for (int i = 1; i < N; i++)
            dialogs[i] = new JDialog(dialogs[i - 1], "", ModalityType.DOCUMENT_MODAL);

        for (int i = 0; i < N; i++) {
            JButton button = new JButton(String.valueOf(i));
            if (i != N - 1) {
                JDialog next = dialogs[i + 1];
                button.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        next.setVisible(true);
                    }
                });
            }
            dialogs[i].add(button);
        }

        for (int i = 0; i < N; i++) {
            dialogs[i].pack();
            dialogs[i].setLocationByPlatform(true);
        }

        dialogs[0].setVisible(true);
    }
}
0
satokun Messages postés 9 Statut Membre
 
salut, dsl pour le temps que je mets a répondre (je suis un peu pris par mon boulot) et je te remercie KX pour le mal que tu te donnes à m'éxpliquer.

donc, je veux savoir est ce qu'il y a moyen de "switcher" la modalité entre le JDialog et les JOptionpane, pour éviter de créer des class entières (héritant de JDialog) juste pour des messages d'erreurs, ou pour récuperer une chaine de caractères !!
0
KX Messages postés 19031 Statut Modérateur 3 020
 
uste pour des messages d'erreurs, ou pour récuperer une chaine de caractères !!
Tu as les JOptionPane pour ça.

https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
0
satokun Messages postés 9 Statut Membre
 
justement c'est ça le vrai problème, les JOptionpane ne s'affichent pas lorsque je définis la JDialog comme modal, donc j'ai essayé de désactiver la modalité du JDialogue lorsque je lance la JOptionpane mais ça n'a pas marché !
0
satokun Messages postés 9 Statut Membre
 
quelqu'un peut-il m'aider !!
0