Java 这个关于PropertyChangeListener的推理正确吗?
我对Java 这个关于PropertyChangeListener的推理正确吗?,java,swing,events,propertychangelistener,Java,Swing,Events,Propertychangelistener,我对PropertyChangeListener接口的使用有一些疑问 我有一个名为GUI的类,它实现了PropertyChangeListener接口 在这个类中,我使用以下方法创建并显示JFrame(LoginFrame是一个扩展JFrame的自定义类): 因此,在我的LoginFrame对象上,我添加了一个PropertyChangeListener。因此,我认为我正在添加一种机制,当更改此对象中属性的值时,它会通知此更改,该更改将由以下方法处理(在我的GUI类中声明): 在我的LoginF
PropertyChangeListener
接口的使用有一些疑问
我有一个名为GUI
的类,它实现了PropertyChangeListener
接口
在这个类中,我使用以下方法创建并显示JFrame
(LoginFrame
是一个扩展JFrame
的自定义类):
因此,在我的LoginFrame
对象上,我添加了一个PropertyChangeListener
。因此,我认为我正在添加一种机制,当更改此对象中属性的值时,它会通知此更改,该更改将由以下方法处理(在我的GUI
类中声明):
在我的LoginFrame
类中的特定情况下,我有一个JButton
,如果单击该按钮,将触发将由前面的方法处理的事件,方法如下:
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("Button LogIn cliccked");
// 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:
firePropertyChange("loginResult", false, loginResult);
}
我的推理正确吗
谢谢
安德烈
setXXX()
方法来更改xxx
属性。所有Java bean都与getXXX()
和setXXX()
方法合并,以获取和设置它们的属性xxxx
。更改属性的是setXXX()。我们应该在更改属性后触发该属性,在上下文中我们正在更改它,因此它是setXXX()
方法。让我们看看组件的setPreferredSize(dimension)方法源代码
类:
public void setPreferredSize(Dimension preferredSize) {
if (prefSizeSet) {
old = this.prefSize;
}
else {
old = null;
}
this.prefSize = preferredSize;
prefSizeSet = (preferredSize != null);
firePropertyChange("preferredSize", old, preferredSize);
}
请参见,我们将在使用相应属性名称更改属性时触发该属性。优点是它增加了更好的清晰度,使代码结构更具可读性
addPropertyChangeListener(“aProperty”,PropertyChangeListener)
方法,而不是在侦听时对每个属性进行条件检查:它将侦听所定义的特定属性更改,以代替“aProperty”
是的,你的推理看起来不错。你有问题吗?你试过了吗?没有,代码不是我的,我也不确定关于它的推理是否正确。你不明白上面的代码是什么?+1,但我建议属性名是一个公共字符串常量,以免遇到拼写或大写问题。谢谢你的提述。在答案中添加了建议
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("Button LogIn cliccked");
// 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:
firePropertyChange("loginResult", false, loginResult);
}
public void setPreferredSize(Dimension preferredSize) {
if (prefSizeSet) {
old = this.prefSize;
}
else {
old = null;
}
this.prefSize = preferredSize;
prefSizeSet = (preferredSize != null);
firePropertyChange("preferredSize", old, preferredSize);
}