Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

JFrame

3 réponses
Avatar
meta
Bonjour,

Je reprends un programme qui fait afficher une fenêtre JFrame sur clic
bouton. Le problème de cette fenêtre est qu'elle est un peu trop modale:
elle masque toutes les applications et pas seulement celle qui l'appelle.
Je ne m'y retrouve absolument pas dans le fouillis du programme d'une part,
des API java de l'autre et mes laborieuses recherches sur le net n'ont rien
donné.
Donc je demande du secours ici :) Merci d'avance.

3 réponses

Avatar
Yliur
Le Thu, 18 Jul 2013 21:27:51 +0200
"meta" a écrit :

Bonjour,

Je reprends un programme qui fait afficher une fenêtre JFrame sur
clic bouton. Le problème de cette fenêtre est qu'elle est un peu trop
modale: elle masque toutes les applications et pas seulement celle
qui l'appelle. Je ne m'y retrouve absolument pas dans le fouillis du
programme d'une part, des API java de l'autre et mes laborieuses
recherches sur le net n'ont rien donné.
Donc je demande du secours ici :) Merci d'avance.



Mais que voudrais-tu faire exactement ? Lui donner une taille réduite,
qui dépend de sa fenêtre mère ? La confiner à la fenêtre mère ?
Avatar
meta
Mais que voudrais-tu faire exactement ? Lui donner une taille réduite,
qui dépend de sa fenêtre mère ? La confiner à la fenêtre mère ?



Comme indiqué, je reprends un programme que je n'ai pas écrit.

Actuellement lorsque cette JFrame s'affiche, elle reste devant tout le monde
quoi qu'il arrive. Supposons que j'ouvre Word par exemple: la fenêtre du
document restera elle aussi derrière même si je clique dessus pour en faire
la fenêtre active. Par contre elle recouvrera bien la fenêtre de
l'application qui a servi à lancer la JFrame.

Je veux rendre ma fenêtre modale pour l'application mais non modale pour les
autres.
Avatar
Yliur
Le Thu, 18 Jul 2013 22:21:15 +0200
"meta" a écrit :

>Mais que voudrais-tu faire exactement ? Lui donner une taille
>réduite, qui dépend de sa fenêtre mère ? La confiner à la fenêtre
>mère ?

Comme indiqué, je reprends un programme que je n'ai pas écrit.

Actuellement lorsque cette JFrame s'affiche, elle reste devant tout
le monde quoi qu'il arrive. Supposons que j'ouvre Word par exemple:
la fenêtre du document restera elle aussi derrière même si je clique
dessus pour en faire la fenêtre active. Par contre elle recouvrera
bien la fenêtre de l'application qui a servi à lancer la JFrame.

Je veux rendre ma fenêtre modale pour l'application mais non modale
pour les autres.



Est-ce que le code qui construit la fenêtre se trouve dans le
constructeur de la classe ? Le plus simple serait sans doute de lire
cette partie et de voir ce qui peut mener à ce comportement. Ou de lire
la javadoc de JFrame.

Par exemple est-ce qu'il y a un appel à setAlwaysOnTop ? Une méthode de
JFrame qui correspond au comportement que tu as actuellement
apparemment.

Je ne crois pas que les fenêtres puissent être rendues modales, au
contraire des boîtes de dialogue (JDialog). Je ne sais pas s'il y a une
solution simple à ce problème, mais je ne suis pas un grand
spécialiste de Swing. Une solution plus compliquée consiste à
intercepter quelques événements de la fenêtre mère et de la fenêtre
fille (voir WindowListener par exemple) pour remettre la fenêtre fille
sur le dessus à la main. Ou en faire une boîte de dialogue, si ça
n'entraîne pas trop de modifications.