Conseils utiles

JWindow, JFrame, JDialog

Pin
Send
Share
Send
Send


Quelle est la bonne façon d’abandonner une application Swing à partir de code et quels sont les pièges?

J'ai essayé de fermer mon application automatiquement après le travail du minuteur. Mais appeler simplement dispose () sur le cadre JFrame n’a pas suffi - la fenêtre a disparu, mais l’application n’a pas pris fin. Toutefois, lorsque vous fermez la fenêtre à l'aide du bouton de fermeture, l'application se ferme. Que dois-je faire?

Votre action de fermeture JFrame par défaut peut être définie sur "DISPOSE_ON_CLOSE" au lieu de EXIT_ON_CLOSE (pourquoi les utilisateurs continuent d'utiliser EXIT_ON_CLOSE en dehors de moi).

Les méthodes JFrame les plus utiles

Les méthodesDescription
setLocation ()Ce groupe de méthodes vous permet de définir la position et la taille de la fenêtre à l'écran. setLocation () définit la position de la fenêtre, setSize () vous permet de spécifier sa taille, et en utilisant setBounds () vous pouvez immédiatement définir le rectangle que votre fenêtre occupera à l'écran
setSize ()
setBounds ()
rask ()Vous permet de "compresser" les composants disponibles dans la fenêtre, de manière à ce qu'ils occupent tout l'espace nécessaire. Lorsque cette méthode est appelée, les composants passent à l'état «visible», bien qu'ils n'apparaissent pas à l'écran tant que l'une des méthodes suivantes n'est pas appelée.
show ()Affiche une fenêtre à l'écran. Après avoir appelé ces méthodes, les composants passent à l'état «visible» et commencent à être servis par la file d'attente d'événements. La méthode show () valide également les composants contenus dans la fenêtre.
setVisible ()
dispose ()Supprime la fenêtre de l'écran (si elle est visible au moment de l'appel de la méthode) et libère toutes les ressources qui lui appartiennent.

JWindow Window

Le «parent» de toutes les fenêtres Swing est une fenêtre sans bordure ni contrôle Jwindow.

Classe Jwindow C'est une fenêtre sans cadre et sans contrôles destinés, par exemple, à la fermer ou à la déplacer. Ce type de fenêtre offre des options de personnalisation minimales, contrairement à la fenêtre JFrame la plus utilisée. Une fenêtre sans cadre n'est pas souvent requise dans les programmes. Toutefois, dans certains cas, cela peut être utile, en particulier dans les cas où il est nécessaire d'afficher brièvement certaines informations, telles qu'un écran de démarrage du programme ou une invite pour l'utilisateur, sans qu'il soit nécessaire de gérer une fenêtre contenant ces informations.

Windows Jwindow utilisé par les menus contextuels JPopupMenu dans les situations où il n’ya pas assez d’espace dans la fenêtre de l’application pour placer un composant léger dans la couche POPUP_LAYER du panneau multicouche, où les menus contextuels sont situés par défaut. Dans cette situation, au lieu d'un composant léger, une petite fenêtre sans cadre JWindow est créée. Elle peut être placée n'importe où sur l'écran, car elle appartient au système d'exploitation. Dans cette fenêtre, le menu contextuel est placé.

Prenons l'exemple de JWindowTest. L'idée de base d'utiliser une fenêtre sans cadre Jwindow consiste à copier une partie de "l'image du bureau" dans la fenêtre de l'application. Grâce à la classe Robot apparue dans le package JDK 1.3, vous pouvez "capturer" une copie d'écran du bureau.

JWindow exemple

Dans cet exemple, l'application hérite de la fenêtre Jwindowpour faciliter l’appel des méthodes de cette classe et ajouter des composants à la fenêtre. Un objet Robot doit être créé dans un bloc try. attraper, parce que sa création peut être interdite par le gestionnaire de sécurité utilisé par la machine virtuelle Java. Cependant, une atteinte à la sécurité ne nous menace pas, car nous créons une application distincte, pas une applet.

Nous avons découpé une partie de l'image de «bureau» à l'aide de la méthode createScreenCapture () en plus de l'emplacement de notre fenêtre. Ensuite, le composant ImageDraw est ajouté au panneau de contenu de la fenêtre, qui affiche l'image de bureau recadrée. Une fois la fenêtre affichée à l'écran, le programme s'endort pendant 10 secondes, puis termine son travail.

Capture d'écran du bureau avec interface de fenêtre JWindow exemple présenté dans la figure suivante.

Avant de configurer la fenêtre, dans l'exemple JWindowTest, le constructeur de la classe de base est appelé avec le mot clé super () sans paramètre. En fait, fenêtres sans cadre Jwindow lors de la création, ils ont nécessairement besoin d'indiquer leur "parent" - une fenêtre avec un JFrame, ce qui peut ne pas toujours être gênant. Surtout dans de tels cas, un constructeur sans paramètre a été ajouté à la classe JWindow, ce qui crée une fenêtre auxiliaire JFrame invisible et l’utilise comme "parent". Après cela, toutes les fenêtres sans cadre ainsi créées utilisent uniquement cette fenêtre et économisent des ressources.

Il convient également de noter qu’en utilisant le constructeur sans paramètres, une fenêtre est créée Jwindowincapable d'obtenir le focus d'entrée. Le plus souvent, ce comportement est nécessaire (après tout, les barres d'outils, les écrans de veille contextuels et les menus ne nécessitent pas de focus de saisie). Si vous avez besoin d'activer l'entrée, utilisez la méthode setFocusableWindowState (true).

Fenêtre Jframe

La fenêtre Jframe hérite des propriétés de la classe JWindow et constitue la fenêtre la plus générale utilisée dans les applications. Les principales différences entre la fenêtre JFrame et JWindow:

  • la présence d'un cadre permettant de redimensionner la fenêtre,
  • la présence d'un titre avec le nom de l'application (le titre peut être vide),
  • la possibilité d'utiliser le menu système, ce qui vous permet de manipuler la fenêtre et l'application,
  • la présence de boutons de commande pour fermer et minimiser la fenêtre.

La grande majorité des applications utilisent la classe pour placer des composants d'interface utilisateur Jframe. Les développeurs Balançoire Défini une méthode spéciale pour fermer la fenêtre setDefaultCloseOperation, ce qui simplifie grandement cette opération. Considérez simple Exemple Jframe (JFrameWindowListener) événement de fermeture de la fenêtre de gestion.

Exemple Jframe

L'exemple crée une fenêtre Jframe avec la définition d'en-tête dans le constructeur de la classe de base. Vous pouvez également utiliser la méthode setTitle () de la classe JFrame pour déterminer la barre de titre d'une fenêtre.

Avant de définir la taille de la fenêtre et de l'afficher à l'écran, la méthode setDefaultCloseOperation () est appelée. Cette méthode vous permet de spécifier quelle action sera effectuée lors du traitement préliminaire de l'événement processWindowEvent () avant de fermer la fenêtre. La constante par défaut est HIDE_ON_CLOSE, ce qui supprime une fenêtre de l'écran à sa fermeture. Vous pouvez utiliser la valeur EXIT_ON_CLOSE, qui indique que lors de la fermeture de la fenêtre, il est nécessaire de fermer l'application.

Dans l'exemple, la constante DO_NOTHING_ON_CLOSE est transmise à la méthode setDefaultCloseOperation - ne faites rien lorsque la fenêtre est fermée. À la fenêtre Jframe un écouteur est connecté et le traitement des événements de fermeture de fenêtre est effectué dans la méthode windowClosing. L'algorithme de traitement est conçu pour que la fenêtre se ferme à la troisième tentative. Le numéro de tentative est affiché dans l'étiquette de l'interface.

Une capture d'écran du bureau avec l'interface de fenêtre de notre programme est présentée dans la figure suivante.

Pour déterminer l'icône de la fenêtre, vous devez utiliser la méthode setIconImage (). L'icône est située sur le bouton de la fenêtre réduite ou dans le titre de la fenêtre à l'état normal.

Parmi les fonctionnalités supplémentaires d'une fenêtre avec un cadre Jframe il convient de mentionner sa capacité à «cacher» ses «bijoux»: les contrôles du cadre et de la fenêtre. Ceci est fait par la méthode JWindow.

Événements de fenêtre, WindowListener, WindowFocusListener

Les fenêtres pivotantes (JWindow, JFrame, JDialog) prennent en charge deux types d’événements:

  • WindowListener - vous permet d’en savoir plus sur les changements d’état de la fenêtre,
  • WindowFocusListener - indique que les composants de la fenêtre reçoivent ou perdent le focus

Vous trouverez une liste complète des méthodes de données d'écoute dans la documentation en ligne Java.

Dans l'interface d'écoute Windowlistener plus souvent que d'autres utilisent la méthode windowClosingappelé par le système d’événements lorsque la fenêtre est fermée. L'exemple ci-dessus le montre clairement.

À encadrer Jframe Vous pouvez connecter un écouteur de fenêtre créé sur la base de Windowadapter (afin de ne pas implémenter toutes les méthodes définies dans l'interface WindowListener) et substituer la méthode windowClosing, comme présenté dans les lignes de code suivantes:

Lorsque vous quittez le programme, une boîte de dialogue s'ouvre dans le panneau. JOptionPane et on demande à l'utilisateur de confirmer s'il veut vraiment finir de travailler avec l'application. Si la réponse est oui, alors le programme se termine.

Boîte de dialogue JDialog

Les dialogues sont le plus souvent utilisés dans les applications pour obtenir des informations supplémentaires afin de définir les paramètres de l'application et d'afficher des informations auxiliaires / de débogage importantes. Les boîtes de dialogue, en règle générale, sont créées par modal, bloquant l'accès aux autres fenêtres de l'application, jusqu'à ce que l'utilisateur ait fini de travailler avec la boîte de dialogue modale. Les boîtes de dialogue modales sont situées en haut de la fenêtre principale de l'application. L'apparence des boîtes de dialogue diffère peu des fenêtres avec JFrame, mais elles ont généralement moins de contrôles de fenêtre (le plus souvent, il n'y a qu'un bouton de fermeture de fenêtre) et il n'y a pas de menu système.

Dans Swing, les dialogues sont implémentés par la classe Jialoghérité de la classe de base des fenêtres JWindow et vous permet de créer des boîtes de dialogue standard et modales. JDialog prend en charge, comme JFrame, la fermeture de fenêtre et est par ailleurs similaire aux autres fenêtres Swing.

Lors de la création de boîtes de dialogue Swing, vous devez spécifier une «fenêtre parent», qui peut être une fenêtre avec un JFrame ou une autre boîte de dialogue. Jialog. Il existe également un constructeur qui ne nécessite pas de fenêtre «parent», mais utilise une fenêtre auxiliaire transparente, mentionnée à la page «Fenêtre sans fenêtre JWindow».

Exemple de création d'une boîte de dialogue JDialog

Dans l'exemple, créez une fenêtre avec un cadre Jframe, le panneau de contenu contient deux boutons JButton. En cliquant sur les boutons, les boîtes de dialogue sont créées dans une méthode createDialog () distincte. Boîte de dialogue avec un titre donné Jialog peut être modal et non modal. Le programme vous permet de créer plusieurs fenêtres non modales en même temps, mais un seul modal. Les fenêtres sans mode ne bloquent pas le travail avec la fenêtre principale de l'application. Lors de la fermeture de la boîte de dialogue, la constante DISPOSE_ON_CLOSE est utilisée, ce qui supprime la fenêtre après la fermeture.

L'interface d'utilisation de l'exemple JDialog est présentée dans la capture d'écran suivante.

La bibliothèque Swing fournit un ensemble de boîtes de dialogue standard Jialog recevoir et afficher des informations simples. Avant de créer votre propre boîte de dialogue, vous devriez envisager d’utiliser une boîte de dialogue standard.

Décoration de la fenêtre

À partir de JDK 1.4, il est devenu possible de personnaliser le "design" visuel de Windows: le cadre, les contrôles de la fenêtre (boutons de fermeture ou de réduction) et le menu système. Le besoin en a été ressenti depuis les toutes premières versions de Swing.

De nos jours, la création de différentes interfaces de fenêtre est possible grâce aux améliorations apportées à l'interface utilisateur du panneau racine de JRootPane. Le représentant d'interface utilisateur vous permet de créer des cadres, des titres, des menus système et des boutons de commande de fenêtre spéciaux, et de les placer dans le panneau racine au besoin, à l'aide d'un gestionnaire d'emplacement spécialisé. Le gestionnaire d'emplacement contrôle l'espace du panneau racine. De plus, avec la nouvelle conception des fenêtres, les éléments système de la fenêtre sont désactivés.

Dans les classes JFrame et JDialog, il existe une méthode statique setDefaultLookAndFeelDecorated (), qui permet de styliser toutes les fenêtres créées.

Exemple de décoration de fenêtre: Décoration JDialog

L'exemple crée une fenêtre simple avec un cadre et une boîte de dialogue. Avant de créer des fenêtres, la méthode setDefaultLookAndFeelDecorated () est appelée, ce qui signifie que pour les fenêtres créées Jframe et Jialog conception spéciale sera nécessaire. Ensuite, les tailles des fenêtres sont déterminées et affichées à l’écran.

Faites attention à la méthode du panneau racine setWindowDecorationStyle (), qui vous permet de personnaliser l'apparence de la fenêtre. Si une fenêtre avec un cadre n'a qu'un seul type de conception, les boîtes de dialogue peuvent avoir un aspect différent selon leur objectif (présentation d'informations, message d'erreur, etc.). Dans l'exemple, il a été déterminé que la boîte de dialogue créée est requise pour afficher des informations et doit être adaptée en conséquence.

L'interface de l'exemple de fenêtres décorées avec l'apparence de métal est présentée dans la capture d'écran suivante.

Une décoration de fenêtre spéciale peut s'avérer utile en tant qu'outil vous permettant de contrôler complètement, jusqu'aux fenêtres, l'apparence de votre application. En créant votre propre représentant d'interface utilisateur pour le panneau racine, vous pouvez donner à votre application un aspect unique, facilement reconnaissable par les utilisateurs.

Java Swing. Fenêtre simple avec bouton


Créer un fichier Mywindow.java:


Voici la variable équilibre nous avons créé un attribut de la classe pour pouvoir y accéder à partir de la méthode de cette classe. Pour une raison similaire, nous avons placé l'étiquette. balanceLabel dans l'attribut de classe, et cela nous a permis d'y accéder à partir de la méthode updateBalance ().
Sur le bouton btnAugmenter nous mettons en place un auditeur d'événement en instanciant une classe Actionlistenerdans lequel la méthode a été redéfinie actionPerformed.

Regarde la vidéo: Swing Containers Tutorial part-8 (Janvier 2022).

Pin
Send
Share
Send
Send