[Swing] Information sur des enchainements de fenêtres

Signaler
Messages postés
23
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
12 septembre 2005
-
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
-
(Re)Bonjour,

je suis en train de faire une ihm pour un projet en ce moment.

Je dois ouvrir de nouvelle fenêtres qd je clique sur certains boutons.

Pour le moment, lorsque je clique sur le bouton en question, je met
dans la fonction associé au click de bouton un
ihmLaFenetreQueJeVeux.main(null) ..

Cest vachement crade je trouve ...

Mais vu que c est juste une ihm pour le moment, je peux tout à fait laisser ca comme ca.

Cependant, il va falloir que je code le projet associé, et j aimerais
savoir comment faire pour passer "proprement" d'une fenêtre à une
autre, sans faire appel à des main ..



Voila, je pense que c est assez simple, mais je vous pose tout de même
la question, n'ayant pas trouvé de solutions pour le moment.


Merci d'avance

8 réponses

Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
16
Si ce sont des fenetres Swing, genre JFrame et tout, et bien rien de plus facile, tu fais le non de frame.show();
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
16
/auteurdetail.aspx?ID=246699 Si ce sont des fenetres Swing, genre JFrame et tout, et bien rien de plus facile, tu fais le nom de frame.show();

désolé, erreur de frappe
Messages postés
23
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
12 septembre 2005
1
A t on besoin de redéfinir la méthode show ?

Car j'ai l'erreur suivante :

src\IHM\ihmAccueil.java:626: non-static method show() cannot be referenced from a static context



Code de la méthode:

private void btnAjoutProfessionMouseClicked(java.awt.event.MouseEvent evt)

{

ihmAjoutProfession.show();

}



sachant que : public class ihmAjoutProfession extends javax.swing.JFrame

{

.................

}



Cependant, au sein d'une classe, un this.show(false) marche parfaitement bien pour arreter l'affichage de la classe.



Autre question: L'appel à la méthode entraine t elle directement la
libération de la mémoire utilisée par cette frame (java ayant un
garbage collector) dans le cas ou il lui dit d'arrêter d'afficher cette
frame?
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
16
Alors depuis java 1.4 je crois tu ne dois plus faire de this.show(), mais plutot du this.dispose(), ce qui libère la memoire. Sinon tu dois faire pour masqeur la fenetre this.serVisible(true ou false).


Pour ton erreur en fait ton objet ihmAjoutProfession doit être definit en static dans ta méthode, ce qui n'ai pas autoriser. Si tu souhaite laisser cela en static créer une fonction du style afficheToi dans ihmAjoutProfession tu la mets en static . Et dedans tu fais this.show()

Comme ca je pense que ca devrait fonctionner
Messages postés
23
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
12 septembre 2005
1
finalement, j ai fait comme ca :



private void btnAjoutProfessionMouseClicked(java.awt.event.MouseEvent evt)

{


ihmAjoutProfession tmp = new ihmAjoutProfession();

tmp.setTitle("Pervilla: Ajouter une profession");

tmp.setSize(200,130);

tmp.show();

}



Ce qui m'amène à un autre probleme ..

Dans la fenêtre ihmAjoutProfession, j'ai une méthode d'ajout d'une
profession qui doit modifier une JComboBox dans ma fenetre ihmAccueil.

J'utilise un singleton pour avoir ma liste de choix possible dans ma
JComboBox, que je rempli au depart en parsant un fichier de sauvegarde.

Lorsque je clique sur le bouton ajouter de la fenetre
ihmAjoutProfession, j'aimerais que ma JComboBox de la fenetre
ihmAccueil se mette à jour en prenant en compte ce que j ai rajouté.



Voici le code en question :

public class ihmAccueil extends javax.swing.JFrame

{

....

public void updateBoxNomMetier(String toAdd)

{

System.out.println("add :" + toAdd);

BoxNomMetier.addItem(toAdd);

}

}



public class ihmAjoutProfession extends javax.swing.JFrame

{

..

}



Je n'arrive pas à acceder depuis la classe ihmAjoutProfession à la méthode updateBoxNomMeter de la class ihmAccueil.

J'ai modifié le extends de ihmAjoutProfession en le remplacant par un
extends ihmAccueil, et en utilisant super.updateBoxNomMetier()

Dans ma fenetre ihmAjoutProfession, je retrouve maintenant les menu du
haut (du genre fichier, etc .. ) de ihmAccueil, ce que je ne veux pas
(mais c est normal, vu qu'elle hérite de ihmAccueil), et lors de
l'ajout, il ne se passe rien dans la fenetre ihmAccueil (bien qu'un
getItemCount() en début et en fin de ma fonction update m'indique bien
que le nombre d'item a augmenté)



J'espère que mon problème est pas trop mal expliqué ...

Quelqu'un a t il une solution ?
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
16
Tu as cas dans le constructeur de ihmAjoutProfession passer en paramètre ton ihmAccueil donc faire en fait

ihmAjoutProfession temp = new ihmAjoutProfession (this); en supposant que ton bouton soit bien dans ihmAccueil
Messages postés
23
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
12 septembre 2005
1
merci beaucoup, cela marche tres bien

j'avais pensé faire ceci, mais je trouvais cela un peu crade.

N'y a t il pas un moyen un peu plus propre , parce que si je dois a chaque fois passer une fenetre dans mes constructeurs ...
Messages postés
105
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
22 octobre 2008
16
Ben sinon tu mets un modificateur en static dans ton ihmAccueil et qui lui modifira le comboBox. Et tu l'appelle depuis l'ecterieur avec ihmAccueil.le_nom_de_ton__modif