je fais un setPreferredSize ... d ailleur c quoi la diff entre setPreferredSize et setSize ?
Version imprimable
je fais un setPreferredSize ... d ailleur c quoi la diff entre setPreferredSize et setSize ?
preferred size : la taille que le composant prefere avoir.
size : la taille actuelle du composant.
minimumSize : taille minimale.
maximumSize : taille maximale.
Je crois que componentResized() n'est appellee que quand setSize() est utilisee. Et pack() utilise la preferredSize => :arrow: donc il faut utiliser les 2 methodes.
:P :PCitation:
Envoyé par bouye
Ah oui ... ca il faut le savoir !!! ca marche ! merci !
edit :tu saurais pas si il est possible de mettre une jframe en modal ???
Il te faut utiliser un JDialog comme on te l'a indique precedement.
Apres si dans la gestion des evenements et/ou autre tu utilises l'interface Window tu peux assez facilement faire du code generique qui fonctionne avec des JWindow, des JFrame et des JDialog, voir meme des composants AWT.
Peut-etre est-'il possible egalement de bidouiller un WindowListener, un WindowFocusListener ou un FocusListener pour remettre la fenetre en avant-plan et reprendre le focus si la fenetre est desactivee ou perd le focus... mais bon mes essais perso d'il y a qq annees dans ce domaine generaient bien plus de problemes qu'ils n'en solvaient.
Salut,
Il me semble plutôt que les différents types de taille (size, preferredsize, minimumSize et maximumSize) dépendent du LayoutManager qui est utilisé...Citation:
Envoyé par bouye
Par exemple avec le Layout null c'est setSize() qui est pris en compte,
alors que le FlowLayout utiliser la preferredSize,
le BorderLayout ne prend en compte que la preferredSize (et partiellement selon la position NORTH/SOUTH/EAST/WEST/CENTER),
et d'autre ignoreront toutes ces propriétés comme le GribLayout....
a++
ah ok ... en fait je pensais que jdialog c etait les boites de dialogue systemes genre "voulez vous quitter ?" ....Citation:
Envoyé par bouye
est ce que l on peut cacher une jframe ?
Disons que c'est le composant de base : une fenetre n'apparaissant pas dans la barre des taches, liee (optionnellement) a une autre fenetre (dans ce cas elle n'apparait pas de maniere separee quand on fait ATL-TAB) et qui peut etre modale ou pas.
Le JOptionPane est construit dessus.
EDIT 2 - setVisible(false) pour cacher ou dispose() pour detruire.
Oui j'avais completement oublie EDIT - d'indiquer que les comportements variaient grandement suivant le layout. Merci d'avoir rajoute la precision.
merci .. en fait j ai une fentre (avec des options) qui s affiche au demarrage (pas besoin d etre modal) et ensuite lorsque je fais "Nouvelle partie" elle doit s afficher en modal ... mais cela ne marche pas ! meme avec jdialog ... je n arrive pas a la definir en modal . :cry:Citation:
Envoyé par bouye
Je n'ai pas tout suivi, mais pour la mettre en modal c'est pas très compliqué :
Code:
1
2
3
4
5
6
7
8
9 public class MaDialog extends JDialog { public MaDialog (MaFenetre fen) { super(fen, "titre", true) // param : fenetre mère, titre, modale oui/non .... } ...
Tu ne peux pas changer la modalité d'une fenêtre après l'avoir affiché. Tu devrais plutôt faire quelque chose du genre :
Dans ton main :
Code:
1
2
3
4
5
6
7
8
9
10 JDialog dlg = new MonDialog(...); dlg.setModal(true); dlg.setVisible(true); // ici tu vérifie une condition pour continuer if(continuer) new GameFrame(...) //sinon on quitte
je fais :Citation:
Envoyé par dr00w
pourtant j arrive a passer d une fenetre a l autreCode:
1
2
3 NewGame aNewGame = new NewGame(); aNewGame.setModal(true);
j ai d abord essaye comme cela ... mais lors du premier demarrage il n y a pas de fenetre mere ... et il est impossible de definir plusieursCitation:
Envoyé par Tentative
Code:
1
2 super(fen, "titre", true) // param : fenetre mère, titre, modale oui/non
Ajoute cette ligne après avoir récupéré ta condition. Si par exemple tu as un attribut genredans ta classe dialog alors ça donne quelque chose comme :Code:
1
2boolean utilisateurVoudraitBienJouer;
Code:
1
2
3
4
5
6
7
8
9
10
11 JDialog dlg = new MonDialog(...); dlg.setModal(true); dlg.setVisible(true); boolean continuer = dlg.utilisateurVoudraitBienJouer; dlg.dispose(); if(continuer) new GameFrame(...) //sinon on quitte
c bizarre jai beau essaye ...le jdialog reste la .... meme apres un dispose !
Voila mon code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String Rep = Group.getSelection().getActionCommand(); if (Rep == "10x10") MainFrame.NewGame (10, 10); else if (Rep == "15x15") MainFrame.NewGame (15, 15); else MainFrame.NewGame (10, 10); dispose(); } });
:oops:
cherche vraiment de l aide :cry: :wink:
:D
Dans le code tu crée une classe anonyme (classe sans nom) :Citation:
Envoyé par Seth77
Ce qui appelles dispose() sur ta classe anonyme.Code:
1
2
3 Ok.addActionListener(new ActionListener() { ... dispose();
ah oui exact !! :roll: :roll:Citation:
Envoyé par dr00w
ma classe anonyme est situe dans le contructeur de la fenetre JDialog .. y a t il un moyen d acceder a la fenetre sans passer par une reference ?
voila j ai mis cela :
dans le contructeur ...ca marche ...Code:
1
2
3JDialog Dialog; Dialog = this;
mais j arrive pas a la mettre en modal lors d un autre appel ....
meme en mettantCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class MenuListener implements ActionListener { public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (cmd == "Nouvelle partie") { System.out.println("Nouvelle partie..."); NewGame aNewGame = new NewGame(); aNewGame.setVisible(true); } else if (cmd == "Quitter") { System.exit(0); } getMainFrame().getGameMap().requestFocus(); getMainFrame().getGameMap().repaint(); } }
Code:
1
2 aNewGame.setModal(true);
Pour ce qui est de l'organisation de ton programme je te conseille d'utiliser un concept de Modele Vue Controlleur.
ainsi tu separes les taches et tu reste suffisament organisé dans ton developpement.
P.S: j'avais utilisé cette methode pour un projet scolaire (un jeu aussi)