7
votes

Comment s'assurer que JDialog reste toujours sur le dessus

J'ai un JDialog qui prend un nom de l'utilisateur. Derrière le JDialog , est une applet. Je ne veux pas que l'utilisateur accède à cet applet jusqu'à ce qu'il soit entré le nom. J'ai essayé jdualog.setalwaysontop (true) , mais l'applet jette une erreur AccessException . Donc, ce que j'ai fait était de garder une boucle tandis que vous allez exécuter jDialog.setVisible (true) jusqu'à ce que le jtextfield (entrée pour le nom d'utilisateur) est vide (""). Mais pour une raison quelconque, cela fonctionne vraiment, ce qui signifie que les charges jdialog , mais il faut du temps pour se concentrer sur le jtextfield et même lorsque l'utilisateur tape son nom, il vient vraiment lent. ... Comme un personnage en 2 secondes ... Y a-t-il une autre façon pour moi de forcer l'utilisateur à entrer le nom avant d'accéder à l'applet?


0 commentaires

3 Réponses :


0
votes

Il fonctionne lentement car le programme traite que foo boucle

Ce que vous pouvez faire est d'ajouter un auditeur de fenêtre, puis de la perte de JDialog a été axée sur la mise au point (ou l'applet gagne-la) renvoie la mise au point sur JDialog.

Cela devrait fonctionner beaucoup mieux que la boucle que vous utilisez maintenant


2 commentaires

Si les modalités changent pour des applets, je suggérerais cela à la place. Je n'ai pas le temps de découvrir, cependant.


J'ai ajouté un focuslistener à JDialog et a écrit le corps pour la fonction Focuslost (). Cependant, cela ne semble pas fonctionner. Si l'utilisateur clique sur le cheydalog, elle ne s'affiche pas. Je pense que cliquer à l'extérieur du JDialog ne cadra pas la mise au point de JDialog, il est juste caché.



12
votes

Utilisez un JDialog modal. Par exemple, le code dans votre méthode init (...) de JapPlet peut inclure:

JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this));
dialog.setModal(true);
dialog.setSize(...);
dialog.setVisible( true );


3 commentaires

Exactement ce que je cherchais. Merci.


Mais il y a un problème. ActionListeners ne répond plus. Et aussi, l'utilisateur peut fermer la boîte de dialogue (il y a un X en haut à droite de la boîte de dialogue). Y a-t-il quelque chose que je dois restaurer après que l'utilisateur ait entré le nom?


Si vous ne voulez pas que l'utilisateur puisse fermer la boîte de dialogue, utilisez: dialog.setDefaultCloseopération (...);



3
votes

Une autre option serait la suivante: xxx

Cela force la boîte de dialogue sur tout autre.


0 commentaires