Pergunta

Eu tenho uma dúvida relacionada ao significado profundo e uso do fireIndexedPropertyChange() o método que o fogo de um evento que vai ser interceptadas e manipuladas por um alteração da propriedade() escuta o que eu declarar em outra classe.

Por exemplo, em uma classe que implementar um login de usuário (GUI (que mostrar um formulário de login) com um JButton eu tenho este método que é executado quando o usuário clique no meu botão:

@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);   


}

Então, quando ainda não registrados usuário clique no botão meu este método é executado e o fogo de um novo PropertyChange do evento.

Meu PropertyChange evento em si as seguintes informações:

  1. O propertyName que é um nome de uma propriedade que pode ser alterado (no meu exemplo, é chamado de loginResult porque eu tenho uma variável booleana denominada loginResult e o valor é true se o usuário pode fazer logon em quando clikc o botão, false caso contrário

  2. Um valor antigo é o antigo valor do imóvel pode ser alterado (no meu exemplo é falsa, pois se o usuário ver o início de sessão do windows, isso significa que ele não está conectado e o loginResul=false

  3. O novo valor:neste caso, é o conteúdo do loginResult variável (true se o usuário está sendo registrado no sistema)

Portanto, este PropertyChange evento será interceptado pelo meu alteração da propriedade() método (declarada em uma classe de escuta) que lidar com isso com base nestes parâmetros:por exemplo, na seguinte forma:

** se o propertyName é loginResult e se o novo valor for true, então não mostrar novamente a janela de início de sessão, mas exibir a janela principal do aplicativo**

É o meu raciocínio correto e que poderia ser uma boa forma de utilizar o PropertyChangeListener interface?

Tnx

Andrea

Foi útil?

Solução

Você pode usá-lo como e que ele vai trabalhar.Mas eu acho que a sua pergunta é mais sobre semântica ao invés de incluir somente se ele funciona.O pacote de interface é java.beans o que a coloca em um contexto de feijão.Se você estiver usando ele em um feijão contexto, i.é.o editor de eventos é um bean, então, eu acho que o "profundo significado" da interface concorda com o seu uso.O javadoc diz

Uma "alteração da propriedade" evento é acionado sempre que um grão de feijão mudança de um "dependente" de propriedade.

Se você não acha que ele vai bem com feijão, em seguida, criar o seu próprio

Outras dicas

Não há razão para usar os eventos para implementar o caso de uso.Você está overengineering coisas simples.O código deve simplesmente o seguinte aspecto:

@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");
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top