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

Agents de placement/Fenêtres Java Discussion :

Fermer une JDialog modale à partir d'un bouton contenu dans un JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut Fermer une JDialog modale à partir d'un bouton contenu dans un JPanel
    Bonjour,

    J'ai actuellement une fenêtre qui comporte plusieurs radio boutons, boutons et autres joyeuseries swing. Parmi tout ça se trouve un bouton qui ouvre une nouvelle fenêtre (un JDialog) comportant des listes déroulantes (autant de boîtes que de lignes sélectionnées sur la fenêtre principale).

    Après avoir choisi toutes les valeurs souhaitées dans les listes déroulantes, je voudrais pouvoir valider par un bouton "customisé" qui comporterait un message du style "valider les choix". Seulement voila, ma JDialog est le container d'un panneau qui contient lui-même un autre panneau, et ce afin de pouvoir gérer les différents Layout que je souhaite utiliser.

    J'ai créé ce bouton mais je n'arrive pas à valider les choix en fermant par clic sur ce bouton "valider les choix".

    Voici mon code actuel :

    Fenêtre principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class JAlgorithmFrame extends JFrame implements ActionListener{
    JButton aDistortedButton;
     
    public void actionPerformed(ActionEvent arg0) {
    		if(arg0.getSource().equals(aDistortedButton)){
    				JDistortedPanel aDistortedDialog = new JDistortedPanel(this,unCalculateur.aCaptorList);
    				JDialog aDialog = new JDialog();
    				aDialog.setContentPane(new JScrollPane(aDistortedDialog));
    				aDialog.setModal(true);
    				aDialog.pack();
    				aDialog.setVisible(true);
    }
    }
    }

    Objet JDistortedPanel :
    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
    public JDistortedPanel(JFrame frame, CaptorList aCaptorList) {
    		super(new BorderLayout());
    		this.frame = frame;
    		setSize(new Dimension(400,400));
    		this.setPreferredSize(new Dimension(400,400));
     
    		//Crée les composants de la fenêtre
            JPanel frequentPanel = createDistortedDialogBox(aCaptorList);
     
            label = new JLabel("Choisissez les valeurs",
                               JLabel.CENTER);
     
            Border padding = BorderFactory.createEmptyBorder(20,20,5,20);
            frequentPanel.setBorder(padding);
     
            add(frequentPanel, BorderLayout.CENTER);
            add(label, BorderLayout.SOUTH);
            label.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    	}
    Méthode utilisée dans le constructeur du JDistortedPanel :
    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
    private JPanel createDistortedDialogBox(final CaptorList aCaptorList) {
        	JLabel explanation = new JLabel("Explications",JLabel.CENTER);
        	JLabel label = new JLabel(simpleDialogDesc + ":");
        	JPanel pane = new JPanel();
     
        	final int numButtons = aCaptorList.size();
        	final double[] distortValues = new double[numButtons];
     
        	//Valeurs possibles pour la liste déroulante
        	//Double[] data = {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9};
     
        	anOKButton = null;
     
        	JDistortedLayoutPanel aDistortedLayoutPanel = new JDistortedLayoutPanel(numButtons,aCaptorList);
     
            // Ajout du bouton de validation
            anOKButton = new JButton("Valider les choix");
            anOKButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    for (int i = 0; i < numButtons; i++) {
    					Captor aCaptor = aCaptorList.get(i);
    					aCaptor.setDistort(distortValues[i]);
    					//setVisible(false);
    				}
                    return;
                }
     
     
            });
     
        	pane.setLayout(new BoxLayout(pane,BoxLayout.Y_AXIS));
        	pane.add(explanation);
        	pane.add(label);
        	pane.add(aDistortedLayoutPanel);
     
        	pane.add(anOKButton);
     
        	return pane;
    	}

    Et enfin le panneau créé dans la méthode précédente :
    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
     
    public JDistortedLayoutPanel(int numCaptors, CaptorList captorList) {
     
    		this.setPreferredSize(new Dimension(400,400));
    		this.setLayout(new SpringLayout());
     
    		//Valeurs possibles 
    		Double[] data = {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9};
     
        	JComboBox[] comboBoxes = new JComboBox[numCaptors];
        	JLabel[] aLabelArray = new JLabel[numCaptors];
        	JLabel aLabelString = new JLabel();
     
        	for (int i = 0; i < numCaptors; i++) {
        		aLabelString = new JLabel(captorList.get(i).getACaptorName(),JLabel.TRAILING);
        		aLabelArray[i] = aLabelString;
        		this.add(aLabelArray[i]);
     
        		//Ajout des listes déroulantes
        		comboBoxes[i] = new JComboBox(data);
        		this.add(comboBoxes[i]);
        	}
        	SpringUtilities.makeCompactGrid(this,
                    numCaptors, 2, //rows, cols
                    5, 5, //initialX, initialY
                    20, 5);//xPad, yPad
    	}
    Voila, si quelqu'un peut m'apporter une quelconque aide, je suis preneur. J'ai cherché des solutions sur le forum mais soit je ne sais pas chercher, soit ça ne correspondait pas à ma situation.

    Merci :-)

  2. #2
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Bon, vu que personne ne répond, je pense que j'ai dû mal formuler mon problème

    En fait la question principale est de pouvoir fermer un JDialog modal créé à partir de la fenêtre principale en appuyant sur un bouton de validation créé dans un JPanel contenu dans un JPanel qui est lui-même contenu dans la JDialog.

    Je sais pas si c'est vraiment plus clair mais ça expliquera peut-être mieux mon problème sans avoir à lire toutes les lignes de code

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    tu crées ta propre classe héritée de JDialog, en mode modal, avec une méthode lancedialogue() du genre :

    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
    class MonDialogue extends JDialog implements ActionListener {
     
    MonDialogue (JFrame origine) {
     
    super(origine, true);
     
    Container contenu=getContentPane();
     
    contenu.add(this.bouton);this.bouton.addActionListener(this);
     
    public actionPerformed (ACtionEvent e) {
     
    if (e.getSource()==this.bouton) this.end=true;
     
    }
     
    public ArrayList lancedialogue() {
    this.end=false;
    this.setVisible(true);
     
    if (this.end==true) {
    this.setVisible(false);
    return v;
    }
    else return null;
    }
     
    private ArrayList v=new ArrayList (); // ArrayList qui contiendra tes objets réponses
    private JButton bouton=new JButton ("valider");
    private boolean end;
     
    }

    et dans la JFrame qui lance le JDialog, tu la lances par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonDialogue dial=new MonDialogue (this);
    ArrayList reponses=this.dial.lancedialogue();
    je crois que c'est quelque part dans la FAQ, sinon c'est aussi très bien expliqué dans le bouquin de Delannoy

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    j'ai oublié la fermeture du constructeur de MonDialogue, mais bon tu l'auras compris

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Hum merci je vais étudier ça de près

  6. #6
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    J'ai essayé cette méthode, mais je n'ai aucun bouton qui s'affiche...
    J'ai essayé de faire un add(contenu) mais ça ne marche pas j'aboutit à une erreur comme ceci :
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding container's parent to itself
    Sinon j'ai passé mes valeurs récupérées dans les comboBox directement par un ActionListener lors de la création de celles-ci, donc je n'ai plus besoin du ArrayList.

    Reste donc le problème de ce bouton OK...


    Voila ce que j'ai fait :

    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
    public class JDistortedDialog extends JDialog implements ActionListener{
     
    	private JButton validationButton = new JButton ("Valider les choix");
     
    	private boolean end;
     
    	public JDistortedDialog(JAlgorithmFrame frame) {
    		super(frame,true);
    		Container aContainer = getContentPane();
    		aContainer.add(this.validationButton);
    		//add(aContainer);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==this.validationButton){
    			this.end=true;
    		}
    	}
     
    	public void launchDistortedDialog(JDistortedPanel distortedPanel) {
    		this.end=false;
    		this.setContentPane(new JScrollPane(distortedPanel));
     
    		this.setTitle("Choix des perturbations associées aux capteurs");
    		this.setModal(true);
    		this.pack();
    		this.setVisible(true);
     
    		if (this.end==true) {
    			this.setVisible(false);
    		}
    	}
    }

    Et dans ma frame de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JDistortedDialog aDistortedDialog = new JDistortedDialog(this,unCalculateur.aCaptorList);
    							aDistortedDialog.launchDistortedDialog(aDistortedPanel);

  7. #7
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    J'avoue ne pas savoir ce que modal veut dire, mais j'ai juste une remarque.

    A priori, le if ne sert à rien là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void launchDistortedDialog(JDistortedPanel distortedPanel) {
     --this.end=false;
     | this.setContentPane(new JScrollPane(distortedPanel));
     |		
     | this.setTitle("Choix des perturbations associées aux capteurs");
     | this.setModal(true);
     | this.pack();
     | this.setVisible(true);
     |		
     ->if (this.end==true) {
          this.setVisible(false);
       }
    }
    A moins d'être très (très) rapide, pour arriver à cliquer sur le bouton entre le this.setVisible(false) et le if

  8. #8
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Effectivement tu as raison ça ne pouvait déjà pas fonctionner puisque l'initialisation à false n'était jamais passée à true...

    J'ai donc changé ça en :

    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
    private JButton validationButton = new JButton ("Valider les perturbations");
     
    	private boolean end;
     
    	public JDistortedDialog(JAlgorithmFrame frame, JDistortedPanel distortedPanel) {
    		super(frame,true);
    		launchDistortedDialog(distortedPanel);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==this.validationButton){
    			this.end=true;
    		}
    	}
     
    	public void launchDistortedDialog(JDistortedPanel distortedPanel) {
    		//this.end=false;
    		this.setContentPane(new JScrollPane(distortedPanel));
    		this.add(validationButton);
     
    		this.setTitle("Choix des perturbations associées aux capteurs");
    		this.setModal(true);
    		this.pack();
    		this.setVisible(true);
     
    		if (this.end==true) {
    			this.setVisible(false);
    		}
    	}
    Mais je n'ai toujours pas de bouton qui s'affiche... j'ai l'impression que le add ne sert à rien, qu'il faudrait ajouter le bouton dans le panel, mais dans ce cas on en revient à mon problème initial, à savoir que je ne sais pas comment dire à la fenêtre de se fermer et non pas seulement au panel.

  9. #9
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Je reste toujours ignorant sur les JDialog, mais, ton booléen end, il est pas initialisé. Fais-le dans le constructeur.

    Le bouton, initialise-le plutot dans le constructeur également, je suis pas convaincu que ça soit très clean de le faire là.

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Deaf
    J'avoue ne pas savoir ce que modal veut dire, mais j'ai juste une remarque.

    A priori, le if ne sert à rien là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void launchDistortedDialog(JDistortedPanel distortedPanel) {
     --this.end=false;
     | this.setContentPane(new JScrollPane(distortedPanel));
     |		
     | this.setTitle("Choix des perturbations associées aux capteurs");
     | this.setModal(true);
     | this.pack();
     | this.setVisible(true);
     |		
     ->if (this.end==true) {
          this.setVisible(false);
       }
    }
    A moins d'être très (très) rapide, pour arriver à cliquer sur le bouton entre le this.setVisible(false) et le if



    c'est pas une course de vitesse, puisque la fenêtre est modale la méthode est toujours courante.

    c'est un algorithme très simple et tout ce qu'il y a de plus classique

    > tu ne peux pas faire de add(contenu) ..... c'est plutôt l'inverse, c'est à "contenu" (résultat de la méthode getContentPane() ) que tu ajoutes les composants. mais tu dois le définir avant en tant que conteneur;

    > "j'ai essayé cette méthode mais j'ai aucun bouton qui s'affiche"
    :

    tu veux dire que tu as recopié mot pour mot le code ? mais ce n'était qu'un exemple de syntaxe, faut l'adapter à tes besoins ..

    > le bouton tu peux l'initialiser dans les champs ou dans le constructeur, dans ce cas précis de classe ça ne change rien

  11. #11
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Non non je te rassure je n'ai pas recopié tout mot à mot le code, j'ai quand même essayé d'adapter ça à mon problème Mais je suis pas sûr que j'ai tout fait comme il le fallait... et surtout tout compris

    Si je reprends le code que j'avais fait initialement à partir de ta proposition, et que j'essaye de décrypter ce qui se passe ça donnerait ça :

    Je crée une nouvelle JDIstortedDialog ==> Ca appelle le constructeur. le Container récupère le contenu (qui est vide à ce moment là). On y ajoute un bouton de validation.

    Ensuite on lance la méthode launchDistortedDialog
    le booléen de fin est initialisé à false. Il devrait être activé sur un clic sur le bouton OK.
    On passe au contenu le distortedPanel créé dans la classe de la fenêtre principale. ==> N'est-ce pas là le souci ? Ca n'ajouterait pas le distortedPanel au contenu mais ça remplacerait le tout ?

    J'avoue être un peu perdu...

    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
    public JDistortedDialog(JAlgorithmFrame frame) {
    		super(frame,true);
    		Container aContainer = getContentPane();
    		aContainer.add(this.validationButton);
    		//add(aContainer);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==this.validationButton){
    			this.end=true;
    		}
    	}
     
    	public void launchDistortedDialog(JDistortedPanel distortedPanel) {
    		this.end=false;
    		this.setContentPane(new JScrollPane(distortedPanel));
     
    		this.setTitle("Choix des perturbations associées aux capteurs");
    		this.setModal(true);
    		this.pack();
    		this.setVisible(true);
     
    		if (this.end==true) {
    			this.setVisible(false);
    		}
    	}

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    bon, là si tu utilises ce code, en instanciant l'objet depuis ta classe JFrame puis en lançant la méthode publique launchmachin :

    . en instanciant ton objet, tu mets le conteneur par défaut, dans lequel tu rajoutes ton bouton

    . et plouf, tu lances ta méthode publique, et là tu lui dis "mets-moi comme conteneur mon distordedPanel"

    tu saisis ? tu changes le conteneur APRES avoir affiché le bouton dans l'objet JDialog .....

    essaie ça ? (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
    23
    24
    25
    26
    27
    28
    public JDistortedDialog(JAlgorithmFrame frame) {
    		super(frame,true);
    		Container aContainer = getContentPane();
    		//aContainer.add(this.validationButton);
    		//add(aContainer);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==this.validationButton){
    			this.end=true;
    		}
    	}
     
    	public void launchDistortedDialog(JDistortedPanel distortedPanel) {
    		this.end=false;
    		this.setContentPane(new JScrollPane(distortedPanel));
                              aContainer.add(this.validationButton);
    
    		
    		this.setTitle("Choix des perturbations associées aux capteurs");
    		this.setModal(true);
    		this.pack();
    		this.setVisible(true);
    		
    		if (this.end==true) {
    			this.setVisible(false);
    		}
    	}

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    cependant, tu n'as pas de retour, donc comment récupères-tu les champs ?

  14. #14
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Pour récupérer les champs j'ai fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void actionPerformed(ActionEvent e) {
        				Cap aCap = capList.get(j);
    					aCap.setDistort(data[comboBoxes[j].getSelectedIndex()]);
    }
    pour chacune de mes comboBox.

    Du coup mon bouton OK ne devrait me servir qu'à fermer la fenêtre.


    Mais la solution que tu m'as proposée dernièrement ne fonctionne pas non plus car le Container n'est pas visible dans la méthode launch. Du coup soit on le redéfinit et on refait un getContentPane, soit on crée un membre de JDistortedDialog aContainer de type Container.

    Dans les deux cas je ne vois rien...

  15. #15
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    exact.

    et un petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void launchDistortedDialog(JDistortedPanel distortedPanel) {
    		this.end=false;this.panneau=new JScrollPane(distordedPanel);
     
    		this.setContentPane(this.panneau);
                              this.panneau.add(this.validationButton);
     
     
    		this.setTitle("Choix des perturbations associées aux capteurs");
    		this.setModal(true);
    		this.pack();
    		this.setVisible(true);
     
    		if (this.end==true) {
    			this.setVisible(false);
    }


    ?


    (en déclarant bien sûr un private JScrollPane panneau dans les champs de ta classe)

    mais juste comme ça, je ne comprends pas pourquoi tu passes par la méthode launch pour envoyer l'argument JDistordedPanel distordedPanel, tu devrais l'envoyer au constructeur au moment de l'instanciation de ton objet, non ? ta méthode launch ne devrait avoir pour seules instructions que de rendre visible ta fenêtre de dialogue modale, donc obliger l'utilisateur à y répondre.



    après reflexion, c'est peut-être plus simple comme ça :

    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
    class JDistortedDialog extends JDialog implements .......  {
            JDistortedDialog(JAlgorithmFrame frame, JDistortedPanel distortedPanel) {
    		super(frame,true);
    		this.pack();
    		setTitle("Choix des perturbations associées aux capteurs");
    		Container aContainer = getContentPane();
                              this.panneau=new JScrollPane(distortedPanel);
    		aContainer.add(this.panneau);this.panneau.add(this.validationButton);
     
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==this.validationButton){
    			this.end=true;
    		}
    	}
     
           public void launchDistortedDialog() {
    		this.end=false;
    		this.setVisible(true);
     
    		if (this.end==true) {
    			this.setVisible(false);
    		}
               }
     
         private JScrollPane panneau;

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    ah oui j'ai oublié (désolé pas de bouton éditer chez moi) : dans le constructeur, après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.panneau.add(this.validationButton);
    ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.validationButton.addActionListener(this);

  17. #17
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Merci pour ta ténacité à essayer de résoudre mon problème

    J'ai testé ça également et... ça ne marche pas non plus :-(

    Petite question, le Container ne sert plus à rien avec ce dernier essai non ?

    J'ai mis le pack() à la fin pour qu'il réorganise au bon moment, j'ai essayé de rajouter le bouton au container... mais non.

    Ce qui est bizarre maintenant c'est que si j'enlève l'ajout de distortedPanel, le bouton ne s'affiche pas (alors qu'avant il s'affichait tout seul...)

    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
    public JDistortedDialog(JAlgorithmFrame frame, JDistortedPanel distortedPanel) {
    		super(frame,true);
     
    		setTitle("Choix des perturbations");
    		setModal(true);
     
    		Container aContainer = getContentPane();
            //this.panneau=new JScrollPane(distortedPanel);
                    this.panneau = new JScrollPane();
    		this.panneau.add(this.validationButton);
    		aContainer.add(this.panneau);
    		this.validationButton.addActionListener(this);
     
    		this.pack();
     
    	}

  18. #18
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    mea culpa, j'ai trouvé la solution, j'avais mal placé mon contrôle setVisible dans ma proposition, et tu dois rajouter ton bouton au JPanel, pas au JScrollPane qui l'englobe (j'avais pas fait attention )

    testé et fonctionne , pour illustration concrète

    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
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.util.*;
     
    public class Plouf {
     
    	public static void main(String[] args) {
     
    		Fen fen=new Fen();
    		fen.setVisible(true);
     
    		}
     
    }
     
    class Fen extends JFrame implements ActionListener {
     
    	Fen () {
     
    		Dimension dim= Toolkit.getDefaultToolkit().getScreenSize();
    		setSize(dim.width, dim.height);
     
    		setTitle("exemple pour alqua");
    		Container contenu=getContentPane();
    		contenu.add(this.bouton);this.bouton.addActionListener (this);
     
    	}
     
    	public void actionPerformed (ActionEvent e) {
    		if (e.getSource()==bouton)
    			this.distodial=new JDistortedDialog(this, this.pan);
    			this.distodial.launch();
     
    			System.out.println("plouf !");
    			System.exit(0);
    		}
     
    	private JButton bouton=new JButton ("appuie sur ce bouton ");
    	private JPanel pan=new JPanel();
    	private JDistortedDialog distodial;
    }
     
    class JDistortedDialog extends JDialog implements ActionListener  {
     
    	JDistortedDialog(JFrame frame, JPanel distortedPanel) {
    		super(frame,true);
    		setBounds(300,300,300,300);
    		setTitle("Choix des perturbations associées aux capteurs");
    		Container contenu = getContentPane();
            this.panneau=new JScrollPane(distortedPanel);
            contenu.add(this.panneau);
            distortedPanel.add(this.validationButton);
            this.validationButton.addActionListener(this);
     
    		}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource()==this.validationButton){
    			this.end=true; this.setVisible(false);
    			}
    		}
     
       public void launch() {
    	   this.end=false;
    	   this.setVisible(true);
           }
     
       private JScrollPane panneau;
       private JButton validationButton=new JButton ("valider");
       private boolean end;
     
    }
    ah oui, j'oubliais : l'intérêt du boolean end, c'est le contrôle des arguments de retour de ta fonction launch, si tu t'en sers pour la réponse du JDialog, mais dans ton cas tu as fait autrement donc tu pourrais t'en passer.

    c'est si tu avais voulu faire un truc comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       public Arraylist launch() {
    	   this.end=false;
    	   this.setVisible(true);
    	if (end) {
    		ArrayList v=new Arraylist();
    		// v recueille tous les objets réponses
    		return v;}
    	else return null; // aucun intérêt, mais obligé sinon erreur de compilation, la méthode doit retourner qq chose, enfin intérêt si la fenêtre JDialog est fermée par autre chose que le bouton^^
    }
    Bonne chance pour la suite

  19. #19
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Merci beaucoup !!!

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

Discussions similaires

  1. [VB6]ouvrir une page Web à partir d'un bouton
    Par JEDTAR dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 08/06/2010, 21h17
  2. accèder à une JFrame à partir d'une JDialog modale
    Par melle_marwa dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 07/05/2009, 22h42
  3. Réponses: 6
    Dernier message: 17/02/2009, 19h32
  4. Comment fermer une fenetre a partir d'une frame
    Par ideal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/08/2006, 13h39
  5. Comment fermer une Fenetre Modal avec Code ?
    Par Soulama dans le forum Langage
    Réponses: 19
    Dernier message: 13/07/2005, 11h17

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