Fermer la fenêtre mère à partir d'un bouton de la fenêtre descendante

Résolu
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011 - 22 juil. 2011 à 11:27
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011 - 22 juil. 2011 à 22:03
bonjour à tous,
(Java application)
j'ai une fenêtre mère x et une fenêtre descendante de ce x appelée y,
je voudrais fermer la fenêtre x à partir d'un bouton de la fenêtre y.
Pourriez vous m'aider sur ce point là?


rado

12 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
22 juil. 2011 à 11:37
Je te donne un exemple :

public class FenetreY extends JFrame {

    /*On place X dans Y*/
    private JFrame fenetreX;

    public FenetreY(){
        fenetreX = new JFrame();
        fenetreX.setBounds(10, 10, 100, 100);
        fenetreX.setVisible(true);
    }

    public void fermerX(){
        fenetreX.setVisible(false);
    }
}
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
22 juil. 2011 à 20:52
Bonjour,

Oui, de cette manière, ca ne peut pas marcher, dans la même idée, tu peux faire ca :

Pour classe Y :
public class ClasseY extends JFrame {

    private JFrame fenetreX;

    public ClasseY(JFrame f){
        fenetreX = f;
        fenetreX.setBounds(10, 10, 100, 100);
        fenetreX.setVisible(true);
    }

    public void fermerX(){
        fenetreX.setVisible(false);
    }

    public void setFenetreX(JFrame f){
        fenetreX=f;
    }
}


Pour classeX
public class ClasseX extends JFrame {

    private JFrame fenetreY;

    public ClasseX(JFrame f){
        fenetreY = f;
        fenetreY.setBounds(10, 10, 100, 100);
        fenetreY.setVisible(true);
    }

    public void fermerY(){
        fenetreY.setVisible(false);
    }

    public void setFenetreY(JFrame f){
        fenetreY=f;
    }
}


Et dans ta main :
ClasseX x = new ClasseX(null);
ClasseY y = new ClasseY(null);
x.setFenetreY(y);
y.setFenetreX(x);




Bon, évidament, ca ne fait pas rêver comme solution, mais si tu débutes et que tu ne veux pas faire trop compliqué ca, ca marche. Mais le design pattern observer est fait pour ca normalement.
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
22 juil. 2011 à 11:34
Pour que tu puisse accéder à la fenêtre x dans la fenêtre y, il faut que cette fenêtre x soit présente dans la fenêtre y ou alors utiliser le design pattern observer.

Si tu es débutante, tu peux te contenter de la première solution.
0
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 17:58
Merci pour ta réponse, j vais essayer et je viens pour dire si ça marche ou pas!
merci bcp
cordialement,
rado


rado
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 18:23
ok, après essais: la première solution ne marche pas!
j crois q j vais approcher vers la deuxième!
merci

rado
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
22 juil. 2011 à 19:39
Les deux solutions que je t'ai donné fonctionnent ! Si tu as un problème, poste ton code, je te dirai ce qui ne va pas

Que vas tu essayer : un dp observer ?
0
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 20:35
ok voici mon code: j'ai trois classe:

classe main: Main_Class.java
1/---------------------------------
public class Main_Class {


public static void main(String[] args) {

ClasseX lancer=new ClasseX();
}

}
-------------------------------------
la classe de la première fenêtre X: ClasseX.java
2/-----------------------------------
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ClasseX extends JFrame{


private static final long serialVersionUID = 1L;
JPanel pan_fen_x=new JPanel();
JButton b_fen_x=new JButton("Fen Y");

ClasseX(){
Initialiser();
}

public void Initialiser(){
this.setBounds(10, 10, 500, 200);
this.setVisible(true);
this.setTitle("Fenêtre X");
this.setContentPane(pan_fen_x);
pan_fen_x.setLayout(null);
pan_fen_x.setBackground(Color.WHITE);
pan_fen_x.setLayout(null);

b_fen_x.setBounds(200, 100, 100, 25);
pan_fen_x.add(b_fen_x);

b_fen_x.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent arg0) {
ClasseY classey=new ClasseY();
classey.setVisible(true);

}
});
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){

System.exit(0);
}
});
}

}
--------------------------------------------
La classe de la fenêtre Y: ClasseY.java
3/------------------------------------------
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ClasseY extends JFrame{


private static final long serialVersionUID = 1L;
private JFrame ClasseX;
JPanel pan_fen_y=new JPanel();
JButton b_fen_y=new JButton("Fermer X");

ClasseY(){
Initialiser();
}

public void Initialiser(){
this.setBounds(10, 10, 200, 200);
this.setVisible(true);
this.setTitle("Fenêtre Y");
this.setContentPane(pan_fen_y);
pan_fen_y.setLayout(null);
pan_fen_y.setBackground(Color.WHITE);

b_fen_y.setBounds(50, 100, 100, 25);
pan_fen_y.add(b_fen_y);;


this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){

dispose();
}
});

b_fen_y.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent arg0) {

ClasseX.dispose();
}

});
}


}
***********************************************
cordialement,
rado
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
22 juil. 2011 à 20:52
Et pour ton code, penses à respecter les normes de codage en java, c'est quand meme plus lisible.

Et la prochaine vois que tu postes du code, n'oublie pas les balises...


Bon courage
0
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 21:17
ok,
merci pour votre aide!
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
22 juil. 2011 à 21:27
Va fonctionne (si oui n'oubli pas d'accepter la réponse)
0
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 21:39
j suis encore sur le point d reformuler mes classe, mes codes! la réponse sera peut être demain! bonne soirée à tous et merci beaucoup à Julien39
0
rdjrrado Messages postés 8 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 22:03
ok, ça marche
merci bcp
0