web-dev-qa-db-fra.com

Quelle est la différence entre un JFrame et un JDialog?

Quelle est la différence entre un JFrame et un JDialog?

Pourquoi ne pouvons-nous pas utiliser setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE); pour un JDialog?

26
Mahdi_Nine

JFrame est une fenêtre normale avec ses boutons normaux (éventuellement) et ses décorations. JDialog de l'autre côté ne comporte pas de boutons de maximisation et de réduction. Ils sont généralement créés avec des méthodes JOptionPane statiques et conviennent mieux pour les rendre modaux (ils bloquent les autres composants jusqu'à ce qu'ils soient fermés).

Mais tous deux héritent de Window, ils partagent donc beaucoup de fonctionnalités.

26
fortran

Pourquoi ne pouvons-nous pas utiliser setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); pour JDialog?

Sûr que vous pouvez.

Postez votre SSCCE qui montre le problème que vous rencontrez lorsque vous utilisez cette valeur.

Cependant, vous ne pouvez pas utiliser EXIT_ON_CLOSE pour un JDialog car cette valeur n'est pas prise en charge, ce qui est logique car JDialog est une fenêtre "enfant" ou "auxiliaire" pour votre application qui est représentée par un JFrame. Fermer une boîte de dialogue ne devrait pas fermer l'application.

5
camickr

Il existe des constructeurs JDialog avec un paramètre owner qui peut être Frame, Dialog ou Window. Une valeur non nulle oblige également la JDialog à rester au-dessus de son propriétaire. Ceci est complémentaire du comportement modal décrit par Fortran.

1
Laurent Caillette

Vous pouvez également utiliser setModal(boolean t); Cela ne fonctionne que sur JDialog. L'utilisateur doit opérer sur JDialog et non sur une autre fenêtre. S'ils veulent utiliser les fenêtres du propriétaire, ils doivent fermer cette JDialog.

0
Ryan