Boutons et Action, Création Listeners Interfaces de fenêtre à l'aide d'objets Swing, InformIT

Boutons d'action et auditeurs

Jusqu'à présent, les interfaces graphiques que nous avons produits à l'aide swing ont inclus aucune action. Ils étaient assis juste là et affiché un texte. La seule action qu'ils ont été pour aller en réponse à cliquer sur le bouton de fermeture-fenêtre. Dans cette section, nous commençons à vous montrer comment concevoir des interfaces graphiques qui font des choses comme changer la couleur, le texte changeant, ou certaines actions plus compliquées. Un bouton est simplement un élément dans une interface graphique qui ressemble à un bouton et qui fait quelque chose lorsque vous cliquez dessus avec votre souris. Vous créez des boutons d'une manière qui est très similaire à la façon dont vous créez des étiquettes. Vous ajoutez des boutons à un JFrame de la même manière que vous ajoutez des étiquettes à un JFrame. mais il y a aussi quelque chose de très nouveau sur les boutons. Vous pouvez associer une action à un bouton, de sorte que lorsque l'utilisateur clique sur le bouton avec une souris, l'interface graphique exécute une action. Un exemple devrait les détails clairs.

Exemple de programmation: Boutons Ajout

Affichage 12 # 151; une interface graphique avec des boutons Ajouté

Une grande partie de ce qui apparaît dans l'affichage 12 est déjà familier. La ButtonDemo de classe est une classe dérivée de la JFrame de classe et il est donc une interface de fenêtre similaire à ceux que nous avons déjà vu dans cet article. Un auditeur de fenêtre de la WindowDestroyer de classe est ajoutée à la méthode addWindowListener comme dans les exemples précédents. La taille est définie, et le volet de contenu est obtenu, avec getContentPane comme dans les exemples précédents. Nous utilisons un gestionnaire de mise en page comme nous l'avons fait dans l'exemple précédent (affichage 10), bien que cette fois nous utilisons la classe gestionnaire FlowLayout.

Un bouton est un élément graphique qui ressemble à un bouton et qui peut faire quelque chose lorsque vous cliquez dessus avec votre souris. Dans ce paragraphe, nous vous dire comment ajouter des boutons à votre interface graphique. Dans le paragraphe suivant, nous vous dire comment spécifier ce qui se passe lorsque le bouton est cliqué.

Un objet bouton est créé de la même manière que tout autre objet est créé, mais vous utilisez la DButton de classe quand vous voulez boutons. Par exemple, l'exemple suivant d'affichage 12 crée un bouton:

L'argument de la construction, dans ce cas, « Red ». est une chaîne qui sera écrit sur le bouton lorsque le bouton est affiché. L'argument de chaîne au constructeur, dans cet exemple « Red ». spécifie la chaîne qui apparaîtra sur le bouton lorsqu'il est affiché à l'écran. Si vous regardez l'interface graphique en affichage 12, vous verrez que les deux boutons sont étiquetés « rouge » et « verte ».

Le bouton est ajouté à la fenêtre de contenu de ce qui suit:

Il n'y a pas de deuxième argument de la méthode ajouter parce que nous utilisons la classe gestionnaire FlowLayout. Si nous avions utilisé à la place de la classe gestionnaire BorderLayout, alors nous avons utilisé une deuxième argument, comme BorderLayout.NORTH.

Dans la sous-section suivante, nous expliquons les lignes de l'affichage 12 impliquant la méthode addActionListener.

Les auditeurs d'action et événements d'action

Lorsque vous cliquez sur un bouton avec votre souris (ou activer un autre élément dans une interface graphique), il crée un objet connu comme un événement et envoie l'objet à un autre objet (ou des objets) connu sous le nom de l'auditeur. Ceci est appelé déclenchement de l'événement. L'auditeur effectue alors une action. Quand nous disons que l'événement est « envoyé » à l'objet d'écoute, ce que nous voulons dire est qu'une méthode dans l'objet écouteur est appelé avec l'objet événement comme argument. Cette invocation se fait automatiquement. Votre GUI Swing définition de classe ne contient pas normalement une invocation de cette méthode. Cependant, la définition de votre swing de classe GUI n'a pas besoin de faire deux choses: d'abord pour chaque bouton, il doit spécifier quel objet (s) sont les auditeurs qui répondront aux événements déclenchés par ce bouton; on appelle cela l'enregistrement de l'auditeur. En second lieu, la définition de votre classe GUI (s) doit également définir la méthode (s) qui sera appelée lorsque l'événement est envoyé à l'auditeur. Notez que ces méthodes vous seront définies, mais dans des circonstances normales, vous ne serez jamais écrire une invocation de ces méthodes. Les invocations auront lieu automatiquement.

La ligne suivante d'affichage 12

enregistre cela comme un auditeur à recevoir des événements du bouton nommé stopButton. Une déclaration similaire enregistre également cela comme un auditeur à recevoir des événements du bouton nommé goButton. Parce que l'argument est le suivant. cela signifie que cela (la ButtonDemo de classe elle-même) est la classe d'auditeur. Rappelons que dans la définition d'une classe, un objet de cette classe est appelée cela. La ButtonDemo de classe elle-même est la classe d'écouteur pour les boutons à l'intérieur de ButtonDemo. (Pour être un peu plus précis, cela signifie que chaque objet de la ButtonDemo de classe est l'auditeur pour les boutons dans cet objet.) Ensuite, nous expliquons comment faire une classe, comme ButtonDemo. dans une classe d'écouteur pour les événements déclenchés par des boutons.

Différents types de composants nécessitent différents types de classes d'écoute pour gérer les événements qu'ils déclenchent. Un bouton déclenche des événements connus comme événements d'action, qui sont traitées par les auditeurs appelés auditeurs d'action.

Un écouteur d'action est un objet de type ActionListener. ActionListener est pas une classe, mais est une propriété que vous pouvez donner à une classe définie. (Ces propriétés, telles que ActionListener. Sont connus comme des interfaces.) Pour une classe dans un ActionListener. vous devez faire deux choses:

Vous ajoutez la phrase implementsActionListener au début de la définition de classe, normalement à la fin de la première ligne.

Vous définissez une méthode nommée actionPerformed.

Nous aurions pu définir une classe distincte qui ne faisait que gérer les événements de bouton, mais il # est plus commode de faire la classe de fenêtre ButtonDemo dans l'action-Listener qui traitera des événements de bouton. Ceci est pratique parce que les événements de bouton sont censés changer la fenêtre, et la meilleure façon de changer une fenêtre par une méthode dans la fenêtre elle-même.

Maintenant, supposons que nous créons un objet, buttonGui. de la ButtonDemo de classe comme suit:

Le ce paramètre dans la définition de la ButtonDemo de classe se réfère à buttonGui. Alors buttonGui est l'auditeur d'action pour les deux boutons à l'intérieur de buttonGui. Alors, quand un bouton est cliqué, la méthode actionPerformed sera automatiquement appelée à l'événement déclenché par le bouton comme argument de actionPerformed. Tout ce qui reste à expliquer comment la méthode actionPerformed fonctionne. Que # Continuons avec notre objet buttonGui de la ButtonDemo de classe.

Si vous cliquez sur l'un des boutons à l'intérieur de buttonGui avec votre souris, qui envoie un événement d'action à l'auditeur d'action pour ce bouton. Mais buttonGui est l'auditeur d'action pour les boutons buttonGui. si l'événement d'action va à buttonGui. Quand un écouteur d'action reçoit un événement d'action est automatiquement transmise de l'événement à la méthode actionPerformed. La méthode actionPerformed est généralement une déclaration de branchement qui détermine quel type d'événement d'action a été tiré et effectue ensuite une action appropriée. Laissez regard de l '# au code de la méthode actionPerformed dans la classe ButtonDemo Ecran 12. Pour plus de commodité, nous reproduisons la définition de ce qui suit:

Dans ce cas, la méthode actionPerformed a besoin de savoir si l'événement d'action est venue du bouton « rouge » ou le bouton « vert ». Si e est un événement d'action qui a été tiré en cliquant sur un bouton, puis retourne e.getActionCommand () la chaîne écrite sur le bouton; dans ce cas, il retourne soit « rouge » ou « vert ». Donc, tout ce que la méthode actionPerformed doit faire est de voir si e.getActionCommand () est « rouge » ou « vert » et effectuer l'action appropriée pour ce bouton. Notez que e.getActionCommand () est un objet de la classe String. La chaîne de classe a une méthode qui équivaut peut être utilisé pour vérifier si e.getActionCommand () est égal à « rouge » ou « vert » (ou toute autre chaîne). L'invocation de la méthode

renvoie vrai si e.getActionCommand () est égale à la String_Argument. et retourne false sinon. Ainsi, les tests de code suivants pour voir si e.getActionCommand () est égal à « rouge » ou « vert » et change la couleur de l'interface graphique en conséquence:

La clause finale d'autre ne devrait jamais besoin d'être exécuté. Il est juste là pour que nous obtiendrions un avertissement, si nous avons fait une erreur inaperçue dans le code.

Gotcha: Modification de la liste des paramètres pour actionPerformed

Lorsque vous faites une classe dans un écouteur d'action, l'en-tête de la méthode actionPerformed est déterminée pour vous. Il doit avoir exactement un paramètre, et ce paramètre doit être de type ActionEvent. comme dans ce qui suit:

Si vous changez le type de paramètre ou si vous ajoutez (ou soustrayez) un paramètre, vous n'aurez pas donné une définition correcte d'un écouteur d'action. (Bien qu'il soit un style plutôt discutable, vous pouvez surcharger le nom de la méthode actionPerformed de sorte que vous avez plusieurs versions de la méthode actionPerformed. Chacun avec une liste de paramètres différents. Mais que celui ci-dessus n'a rien à voir avec faire une classe en une action auditeur.)

La seule chose que vous pouvez changer est le nom du paramètre e car il est juste un « porte-lieu. » Ainsi, le changement suivant est acceptable:

Bien sûr, si vous faites ce changement, puis à l'intérieur du corps de la méthode actionPerformed. vous utiliserez l'identificateur theEvent en place de l'identifiant e.

Conseil de programmation: Code Offre Actions séparément

Vous pouvez simplifier l'écriture du code pour une interface graphique Swing en deux grandes parties: codage ce que l'interface graphique ressemble à l'écran et le codage des actions de l'interface graphique. Par exemple, considérons le programme d'affichage 12. Votre première version de ce programme pourrait utiliser la définition suivante de la méthode actionPerformed:

Avec cette version « ne rien faire » de la méthode actionPerformed. votre programme fonctionnera et affichera un affichage sur l'écran comme indiqué Ecran 12. Si vous appuyez sur l'une des deux boutons de changement de couleur ne se passera rien, mais vous pouvez utiliser cette phase de codage pour ajuster les détails, tels que quel bouton est apparaît en premier. (Notez que le bouton de fermeture-fenêtre ne, cependant, le travail.)

Si vous incluez l'expression implementsActionListener au début de la définition de votre JFrame, vous devez inclure une définition de la méthode actionPerformed. Une définition de la méthode « ne rien faire » ou « pas grand-chose », comme

est souvent appelé un bout. L'utilisation des talons est une bonne technique de programmation dans de nombreux contextes non seulement dans les programmes Swing.

Sinon, lorsque vous effectuez votre première version d'une interface graphique Swing comme celui d'affichage 12, vous pouvez omettre la définition de la méthode actionPerformed complètement, à condition omettez aussi l'expression implementsActionListener et omettez les invocations de addActionListener.

Java Astuce: Utilisez la méthode setActionCommand

Lorsque vous cliquez sur un bouton avec votre souris, il déclenche un événement e connu comme un événement d'action. L'événement e va normalement à la méthode actionPerformed de l'écouteur d'action (s) pour ce bouton. La méthode actionPerformed a besoin de savoir quel bouton a été cliqué quand il obtient l'événement e. Lors de la discussion de la classe ButtonDemo Ecran 12, nous avons dit que l'invocation de la méthode e.getActionCommand () retourne la chaîne écrite sur le bouton. Ce fut une explication légèrement simplifiée. Le e.getActionCommand d'invocation () retourne une chaîne connue sous le nom de la commande d'action pour le bouton. La commande d'action par défaut est la chaîne écrite sur le bouton, mais si vous le souhaitez, vous pouvez spécifier qu'une autre chaîne soit la commande d'action pour un bouton.

Par exemple, dans 12 affichage, nous avons créé le stopButton comme suit:

Si nous ne faisons rien de plus, la commande d'action pour la stopButton sera « rouge ». Cependant, si vous voulez, vous pouvez modifier la commande d'action à une autre chaîne, comme « Stop ». Vous le feriez comme suit:

La méthode actionPerformed alors vérifier la chaîne « Stop » plutôt que la chaîne « rouge ».

Articles Liés