我对这个词的深层含义和用法有疑问 fireIndexedPropertyChange() 触发事件的方法,该事件将被拦截并处理 属性更改() 我在另一个类中声明的侦听器。

例如,在使用 JButton 实现登录 GUI(显示登录表单)的类中,我有一个当用户单击我的按钮时执行的方法:

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


}

因此,当尚未登录的用户单击我的按钮时,将执行此方法并触发一个新的 属性变更 事件。

我的 属性变更 事件本身包含以下信息:

  1. 属性名称 这是可以更改的属性的名称(在我的示例中名为 登录结果 因为我有一个名为的布尔变量 登录结果 如果用户单击按钮时可以登录,则值为 true,否则为 false

  2. 一个 旧值 是可以更改的属性的旧值(在我的示例中为 false,因为如果用户看到登录窗口,则意味着它尚未登录,并且 登录结果=false

  3. 新价值:在这种情况下,它的内容是 登录结果 变量(如果用户正在登录系统则为 true)

所以这 属性变更 事件将被我拦截 属性更改() 方法(在侦听器类中声明)根据以下参数处理它:例如通过以下方式:

** 如果 propertyName 为 loginResult 并且新值为 true,则不再显示登录窗口,而是显示主应用程序窗口**

我的推理是否正确,这可能是使用 属性改变监听器 界面?

总氮

安德里亚

有帮助吗?

解决方案

你可以像这样使用它并且它会起作用。但我认为你的问题更多的是关于语义,而不仅仅是它是否有效。该接口的封装是 java.beans 这将其置于 beans 的上下文中。如果您在 beans 上下文中使用它,即你的事件发布者是一个bean,那么我认为该接口的“深层含义”与你的使用一致。javadoc 说

每当 bean 更改“绑定”属性时,就会触发“PropertyChange”事件。

如果你认为它不适合豆子,那就创建你自己的

其他提示

没有理由使用事件来实现您的用例。你过于简单的事情。代码应该简单看起来像以下内容:

@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");
    }
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top