Bonjour,
Je suis en train de faire un programme Java (mon premier), utilisant des JFrame et des JDialog, sous netbeans.
Au demarrage du programme, la fenetre principale (JFrame) s'ouvre. Elle contient differents boutons permettant d'afficher des fenetres secondaires (JDialog). Celles-ci n'apparaissent pas dans la barre des taches, et je voudrais donc les laisser devant la fenetre principale, des que le programme est actif, et jusqu'a leur fermeture.
Je ne peux pas utiliser "always on top", car je veux au'un autre programme puisse passer au premier plan. C'est uniquement quand mon programme est actif que les JDialog doivent etre devant
Pour le moment, j'utilise le code suivant :
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 /******************************/ /* Ouverture des JDialog */ /******************************/ private void jButton_RiseTransitSetTimeActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: GlobalVariables.RiseTransitSetTimeWindow = new Rise_Transit_SetTimes(new GMRTobservation(), false); GlobalVariables.RiseTransitSetTimeWindow.setVisible(true); this.setEnabled(false); } private void jButton_CreateCmdFileActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: GlobalVariables.commandFileWindow1 = new createCmdFile_obsSetup(new GMRTobservation(), false); GlobalVariables.commandFileWindow1.setVisible(true); this.setEnabled(false); }Dans chaque JDialog, je reactive la fenetre principale a la perte du focus, pour lui permettre de prendre le focus quand elle passe au premier plan, et ainsi d'executer le code ci-dessous.
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 /********************************************************************************************/ /* Passage au 1er plan des JDialogs, en cas de retour sur la fenetre principale */ /********************************************************************************************/ private void formWindowGainedFocus(java.awt.event.WindowEvent evt) { // TODO add your handling code here: //If another window of this program is open, it will be set at top level if (GlobalVariables.commandFileWindow1.isShowing()){ GlobalVariables.commandFileWindow1.setVisible(false); GlobalVariables.commandFileWindow1.setVisible(true); //While another window is open, the main window is disabled this.setEnabled(false); } else if(GlobalVariables.RiseTransitSetTimeWindow.isShowing()){ GlobalVariables.RiseTransitSetTimeWindow.setVisible(false); GlobalVariables.RiseTransitSetTimeWindow.setVisible(true); //While another window is open, the main window is disabled this.setEnabled(false); } }
Je pense qu'il y a beaucoup plus simple que ca, mon code est un peu long pour une action plutot basique a mon avis.
Par contre, je ne comprend pas pourquoi, dans le deuxieme code, si le premier if echoue, les autres ne sont pas executes, au moment ou je lance le programme.
Le code fonctionne donc pour la premiere fenetre, mais pas pour les autres.
En fait, il faut que j'ai valide au moins une fois toutes les conditions precedentes, pour acceder au test de la suivante (dans le code que j'ai mis, il n'y a qu'un if et un else if, donc il faut que le if ait ete valide une fois pour acceder au test du else if).
Quelqu'un comprend pourquoi ou a une solution plus simple?
Merci d'avance pour votre aide.
(Desole pour les accents, je suis a l'etranger, et j'ai un clavier qwerty)
Partager