我怀疑与fireIndexedPropertyChange()方法的深层含义和用法有关,该方法引发一个事件,该事件将由我在另一个类中声明的propertyChange()侦听器拦截和处理。

例如,在使用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);


}


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

我的PropertyChange事件本身具有以下信息:


propertyName是可以更改的属性的名称(在我的示例中被命名为loginResult,因为我有一个名为loginResult的布尔变量,如果用户在单击按钮时可以登录,则该值为true,否则为false
旧值是可以更改的属性的旧值(在我的示例中为false,因为如果用户看到登录窗口,则意味着它未登录并且loginResul = false
新值:在这种情况下,它是loginResult变量的内容(如果用户正在系统中登录,则为true)


因此,此PropertyChange事件将被我的propertyChange()方法(在侦听器类中声明)方法拦截,该方法基于这些参数进行处理:例如,通过以下方式:

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

我的推理是否正确,这可能是使用PropertyChangeListener接口的好方法?

特纳克斯

安德里亚

最佳答案

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


  每当bean更改“ bound”属性时,都会触发“ PropertyChange”事件。


如果您认为豆子配不上它,那么请创建自己的豆子

07-27 18:33