Question

J'ai un doute lié au sens profond et à l'utilisation du fireIndexedPropertyChange() méthode qui déclenche un événement qui sera intercepté et géré par un propriétéChange() auditeur que je déclare dans une autre classe.

Par exemple, dans une classe qui implémente une interface graphique de connexion (qui affiche un formulaire de connexion) avec un JButton, j'ai cette méthode qui est exécutée lorsque l'utilisateur clique sur mon bouton :

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    System.out.println("Button cliccked");

    Main listener = new Main();                         // I intantiate a new Main object to have the PropertyChangeListener
    this.addPropertyChangeListener(listener);           // I add the PropertyChange Listener to this LoginFrame object

    /* I fire a PropertyChange: the event start and will be handled by the propper propertyChange() method definied in the
     * listener class: 
     * 
     * @param "loginButtonClicked" 
     * */
    firePropertyChange("loginResult", false, loginResult);   


}

Ainsi, lorsque l'utilisateur non encore connecté clique sur mon bouton, cette méthode est exécutée et déclenche un nouveau PropriétéChange événement.

Mon PropriétéChange l'événement prend lui-même les informations suivantes :

  1. Le nom de la propriété c'est le nom d'une propriété qui pourrait être modifiée (dans mon exemple, elle s'appelle connexionRésultat parce que j'ai une variable booléenne nommée connexionRésultat et la valeur est vraie si l'utilisateur peut se connecter en cliquant sur le bouton, fausse sinon

  2. Un ancienne valeur est l'ancienne valeur de la propriété qui pourrait être modifiée (dans mon exemple c'est faux car si l'utilisateur voit les fenêtres de connexion cela signifie qu'il n'est pas connecté et que loginResul = faux

  3. Le nouvelle valeur:dans ce cas, c'est le contenu du connexionRésultat variable (vrai si l'utilisateur est connecté au système)

Donc ça PropriétéChange l'événement sera intercepté par mon propriétéChange() méthode (déclarée dans une classe d'écoute) qui le gère en fonction de ces paramètres :par exemple de la manière suivante :

** si le propertyName est loginResult et si la nouvelle valeur est true alors n'affichez plus la fenêtre de connexion mais affichez la fenêtre principale de l'application **

Mon raisonnement est-il correct et cela pourrait être une bonne façon d'utiliser le PropertyChangeListener interface?

Transmission

Andréa

Était-ce utile?

La solution

Vous pouvez l'utiliser comme ça et cela fonctionnera.Mais je pense que votre question concerne davantage la sémantique que la simple question de savoir si cela fonctionne.Le package de cette interface est java.beans ce qui le place dans un contexte de haricots.Si vous l'utilisez dans un contexte de beans, c'est-à-direvotre éditeur d'événement est un haricot alors je pense que le "sens profond" de l'interface est en accord avec votre utilisation.Le javadoc dit

Un événement "PropertyChange" est déclenché chaque fois qu'un bean modifie une propriété "liée".

Si vous ne pensez pas que cela se marie bien avec les haricots, créez le vôtre

Autres conseils

Il n'y a aucune raison d'utiliser des événements pour mettre en œuvre votre cas d'utilisation.Vous survenez des choses simples.Le code devrait simplement ressembler à ce qui suit:

@Override
public void actionPerformed(ActionEvent e) {
    String login = loginTextField.getText();
    char[] password = passwordField.getPassword();
    boolean loginSuccessful = authenticationService.authenticate(login, password);
    if (loginSuccessful) {
        Main main = new Main();
        main.setVisible(true);
        this.setVisible(false);
    }
    else {
        displayErrorMessage("Login failed");
    }
}

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