PB de JPanel qui ne veut pas se refermer

Résolu
Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006 - 21 avril 2005 à 11:45
Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006 - 22 avril 2005 à 09:50
Sensei01

slt,
voila, je cré un JPanel pour lister des éléments (contenue dasn un Vector et que j'affiche avec des JcheckBox) afin que l'utilisateur puisse en sélectionner certains éléments, puis je renvois à la méthode appelante un Vector contenant les éléments sélectionés lorsque l'utilisateru clique sur un bouton. Ca ca marche bien y a pas de probleme.
Le probleme est que lorsque je clique sur ce bouton j'aimerai que la fenetre se ferme automatiquement, mais je trouve pas comment faire (je crois que j'ai tout essayé) snif snif !!!!
Pour l'instant je suis obligé de cliquer sur la petite croix en haut a droite.

Avez vous une solution ?

PS : la méthode System.exit() n'est pas utilisable car ca ferme tout hors j'ai une autre fenêtre qui doit rester ouverte.

9 réponses

wildcat31 Messages postés 46 Date d'inscription jeudi 16 décembre 2004 Statut Membre Dernière intervention 28 août 2005 3
22 avril 2005 à 08:39
snake6, le problème est toujours là puisque sensei n'a pas accès à la Jframe depuis le listener.
La solution que je vois sans trop modifier ta classe, c'est de garder une
référence sur le frame auquel le JPanel appartient. Autrement dit, tu lui mets un attribut JFrame frameParent, que tu initialises dans le constructeur. Comme ça tu peux y accéder dans le listener.
Par ailleurs, la premi-re réponse que j'ai donné est fausse, c'est la méthode dispose() qu'il faut appliquer à la frame. setVisible(false) marche aussi, mais ça ne libère pas les ressources que prennent la fenêtre.

Autrement dit :

public class ItemsPanel extends JPanel {
private JFrame frameParent;

public static void main()
{
// création de la fenêtre d'interface :
JFrame frame = new JFrame("Choix des items");
frame.getContentPane().add(new ItemsPanel());
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.pack();
frame.show();
}

public ItemsPanel(JFrame frame)
{
// initialisation de la class
super();
frameParent = frame;
initGUI();
}

private void initGUI()
{ initialisation des composants de la JFrame }

private void OKMouseClicked(MouseEvent evt)
{
if (evt.getButton() == MouseEvent.BUTTON1)
{
OKCLICK = true;
frameParent.dispose();
}
}

private void chkboxMouseClicked(MouseEvent evt)
{
///////////////////////////////////////////////////
// Action a effectuer si l'on clique sur un item //
///////////////////////////////////////////////////
}

}
3
wildcat31 Messages postés 46 Date d'inscription jeudi 16 décembre 2004 Statut Membre Dernière intervention 28 août 2005 3
21 avril 2005 à 12:49
Bonjour,
Il faut utiliser :
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Cela permet de fermer la fenêtre courante, et dans le cas où c'était la dernière fenêtre qui exécutait quelque chose, cela termine l'application java.

Wildcat
0
Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006
21 avril 2005 à 14:12
Sensei01

ok mais sur koi tu l'applique ton setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); ???????????????????

parce que concretement, moi j'ai ma class et son constructeur et une methode main qui me génère la fenetre, puis une methode qui gere ma selection selon les checkbox que je valide.
en enfin une methode qui s'active lorsque je clique sur ok :

private void OKMouseClicked(MouseEvent evt)
{
if (evt.getButton() == MouseEvent.BUTTON1)
{
OKCLICK = true;
commande pour fermer la Jframe
}
}
0
wildcat31 Messages postés 46 Date d'inscription jeudi 16 décembre 2004 Statut Membre Dernière intervention 28 août 2005 3
21 avril 2005 à 15:04
La méthode s'applique sur la JFrame. Je ne sais pas comment tu as mis tes composants (si ta classe étendait JFrame, ce serait parfait !), mais il faut que tu arrives à l'appliquer sur ta fenêtre, quitte à créer une autre méthode pour l'atteindre.
0

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

Posez votre question
Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006
21 avril 2005 à 16:46
Sensei01

Ben ma classe est extends JPanel !!
en fait ma JFrame est defini dans la methode main() qui l'initialise, j'ai bien essayer de retrouver la JFrame en cours lorsque je suis dans la methode OKMouseClicked mais c'est sans succes !!! :-( grrrrr

Au secours !!!!!! bouhouhou snif snif
0
Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006
21 avril 2005 à 16:56
Sensei01

En fait, voila ma classe ( dans les grandes lignes) :

public class ItemsPanel extends JPanel {

public static void main()
{
// création de la fenêtre d'interface :
JFrame frame = new JFrame("Choix des items");
frame.getContentPane().add(new ItemsPanel());
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.pack();
frame.show();
}

public ItemsPanel()
{
// initialisation de la class
super();
initGUI();
}

private void initGUI()
{ initialisation des composants de la JFrame }

private void OKMouseClicked(MouseEvent evt)
{
if (evt.getButton() == MouseEvent.BUTTON1)
{
OKCLICK = true;
}
}

private void chkboxMouseClicked(MouseEvent evt)
{
///////////////////////////////////////////////////
// Action a effectuer si l'on clique sur un item //
///////////////////////////////////////////////////
}

}

Donc c'est dans OKMouseClicked que je veux fermer la fenetre, si quelqu'un a une idée, je rapel que System.exit() je peux pas faire, et les méthodes comme hide() ou setVisible(false) ne font que masquer l'interrieur de la fenetre

Merci
0
cs_snake6 Messages postés 29 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2010
21 avril 2005 à 23:30
slt
si jé bien compris ta question :
utilise "setVisible(false)" sur ta fenetre sa va la rendre invisible
mais elle existe tjs
sinon
0
cs_snake6 Messages postés 29 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2010
21 avril 2005 à 23:30
slt
si jé bien compris ta question :
utilise "setVisible(false)" sur ta fenetre sa va la rendre invisible
mais elle existe tjs
0
Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006
22 avril 2005 à 09:50
Sensei01

Ca y est ca marche avec ta solution wildcat31

merci
0
Rejoignez-nous