我怀疑与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”事件。
如果您认为豆子配不上它,那么请创建自己的豆子