Question

Je voudrais vous poser quelques questions à propos de Gui.

J'ai vu l'exemple suivant:

public class ShellWithButton {
    public static void main(String[] args) {
    Display display = Display.getDefault();
    Shell shell = newShell (display);
    Button ok = newButton (shell, SWT.PUSH);
    ok.setText ("Push Me!");
    ok.addSelectionListener(new ButtonHandler());
    ok.setLocation(0,0);
    ok.setSize(100,30);
    shell.pack ();
    shell.open ();
    while(!shell.isDisposed ()) {
     if(!display.readAndDispatch())
         display.sleep ();
          }
       display.dispose ();
        }
    }    

public class ButtonHandler 
 implements SelectionListener {
   public void widgetSelected(SelectionEvent e) {
       if(e.getSource() instanceofButton) {
          Button b = (Button) e.getSource();
          b.setText("Thanks!");
      }
   }
public voidwidgetDefaultSelected(SelectionEvent e){
 // TODO Auto-generated method stub
   }
 }

(i) - Quelqu'un pousse le button- Comment le savoir du programme ne pour activer widgetSelected? Je peux voir que le bouton a ajouté l'auditeur de buttonHandler à lui-même, mais pourquoi que la pression sur le bouton et ne pas cliquer juste la case pour envoyer l'événement à buttonHandler? Je ne vois pas où seule la poussée a été envoyé à cet auditeur.

(ii) -Pourquoi dois-je envoyer une instance de la buttonHandler aux auditeurs? qu'est-ce que cela veut dire?

(iii) - ce qui est happeing quand je pousse le bouton? quel est cet événement? événement est une instance du bouton lui-même?

(iv) - Button b = (Button) e.getSource(); pourquoi ai-je besoin de cette coulée de la source? l'événement, comme cela a été écrit, ne peut venir que de ok, qui est une instance de bouton.

(v) - pourquoi que le bouton d'origine va changer son titre? nous changeons B.

Merci beaucoup!

Était-ce utile?

La solution

  1. Quand quelqu'un appuie sur le bouton, le bouton appelle widgetSelected() parce que c'est la façon dont la bibliothèque a été conçue; il a besoin d'appeler quelques-uns méthode de sorte que vous pouvez faire quelque chose et ils se sont installés sur cette méthode. le raison pour laquelle il appelle votre widgetSelected() est parce que vous avez donné votre classe pour appeler. Le bouton connaît votre classe a une méthode widgetSelected() parce que vous avez implémenté SelectionListener, et qui vous oblige à mettre en œuvre la Procédé widgetSelected(). Telle est la raison pour les interfaces, et je vous suggère de lire sur eux. cliquant sur seul le bouton volonté obtenir le bouton pour appeler votre méthode parce que le bouton ne connaît que quand on clique dessus. Quand il y a un clic sur l'écran, seul le widgets qui ont besoin de savoir à ce sujet sont dit.

  2. Comme je l'ai mentionné ci-dessus, vous envoie votre gestionnaire au bouton il sait quoi faire quand il est poussé.

  3. Lorsque le bouton est enfoncé, il doit dire à votre gestionnaire ce est arrivé, et ainsi toutes les informations pertinentes est donnée à vous en tant que SelectionEvent. L'événement lui-même est pas le bouton, mais l'événement vous indique sur quel bouton est enfoncé, si vous voulez le même gestionnaire pour traiter plus d'un bouton.

  4. Vous avez besoin du casting parce que votre méthode widgetSelected() peut être appelé quand il arrive quelque chose à toutes sortes d'objets de l'interface graphique, non seulement boutons. Par conséquent, la source est donnée comme une commune superclasse à tous les widgets qui peuvent appeler votre méthode, et vous devez convertir revenir à un bouton lorsque vous êtes sûr que c'est votre bouton. Oui, dans ce programme ne peut être appelé par le bouton, mais ce n'est pas toujours le cas.

  5. Le texte du bouton change parce que B et le bouton que vous avez créé et affiché, sont le même objet. (Objets et tableaux) en Java sont « pointeurs », ils vous disent où l'objet est. Lorsque vous attribuez un objet à une autre variable, vous n'êtes pas copier l'objet, vous êtes juste en utilisant une autre variable pour pointer vers le même objet.

Autres conseils

(i) GUI utilise généralement le modèle d'observateur , dans lequel un ou plusieurs objets souscrivent à un événement, et chaque fois que cet événement se produit, il est envoyé à tous les objets auxquels vous êtes abonné, comme dans votre cas de bouton.

(ii) Vous envoyer l'instance aux auditeurs afin de les associer, afin qu'ils puissent recevoir l'événement, le cas échéant.

(iii) Qu'est-ce qui se passe est que l'événement est à l'origine des observateurs de recevoir une notification que le bouton a été poussé, qui a finalement conduit à un code en cours d'exécution. L'événement lui-même n'est pas une instance du bouton, mais plutôt une instance distincte pour gérer les événements.

(iv) Vous devez jeter, parce que la signature de la méthode est juste générique, car il est utilisé pour plusieurs types d'événements.

(v) Il a changé son titre, car en utilisant le modèle d'observateur, l'observateur dans ce cas, votre bouton a été averti lorsque l'événement qui faisait pression sur le bouton est arrivé.

(i) L'idée derrière « auditeurs » est que vous voulez fournir une liste des composants, objet, modules logiciels, etc., qui seront informés de l'événement. La raison pour laquelle le bouton cliquable ne pas seulement quelque chose de déclenchement est parce que quelque chose est arrivé à être à l'écoute de cet événement afin de réagir. Tout objet qui implémente l'interface Listener appropriée (en fonction du type d'événement) peut être ajouté, et donc traiter l'événement.

(ii) Il est un rappel. Vous devez dire au Listener, « Voici un exemple d'un objet qui peut gérer vos événements. S'il vous plaît ajouter à la liste des objets à notifier. » Il est un peu comme vous abonnant à un flux RSS, dans un sens -. Tout le monde sur la liste obtient la mise à jour quand il arrive

(iii) L'événement est un objet séparé. Le système de fenêtrage (qui, à un niveau profond, se connecte à la bibliothèque fenêtrage du système d'exploitation sous-jacente) crée l'objet événement, puis descend la liste des listeners inscrits, notification chacun d'entre eux. Il y a quelques exceptions à cette (par exemple, il est possible pour un auditeur d'absorber un événement, ce qui empêche quelqu'un d'autre sur la liste de l'entendre, mais qui est une question distincte de son propre)

(iv) Du fait getSource () retourne une instance d'un composant. Si vous voulez être en mesure d'accéder aux méthodes spécifiques Bouton (ce qui est fait dans la ligne suivante, avec setText, vous devez avoir affaire à une instance de bouton pour cet appel de méthode pour savoir quoi faire (à savoir quelle classe sur laquelle pour fonctionner).

(v) Le bouton ne change pas le titre de ce - la buttonHandler est fait. Ainsi, lorsque le widget obtient sélectionné, la méthode « widgetSelected » est appelée à l'intérieur du buttonHandler. Il vérifie ensuite la source de l'événement (qui fournit une référence au bouton d'origine) puis met à jour le texte du bouton pour indiquer qu'il a été cliqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top