Java propertyChange支持与EventListenerList的区别以及何时更喜欢它们?

Java propertyChange支持与EventListenerList的区别以及何时更喜欢它们?,java,swing,javabeans,propertychangesupport,eventlistenerlist,Java,Swing,Javabeans,Propertychangesupport,Eventlistenerlist,我已经阅读了和的文件。 据我所知,这两种方法都有相似的目的,即在发生事件/属性更改时,保存侦听器列表和通知他们。 是否只有在GUI应用程序的情况下,EventListenerList才变得方便?。对于一个简单的JavaBean应用程序,如果不使用GUI组件,那么使用一个组件比使用另一个组件有什么优势。因为它只是-的一个特定的“子类”(扩展接口),它是一个标记接口,不定义任何方法,使用它比使用EventListenerList容易得多——这是因为如果您从EventListenerList开始,您将

我已经阅读了和的文件。 据我所知,这两种方法都有相似的目的,即在发生
事件/属性更改时,保存
侦听器列表
通知他们。

是否只有在
GUI应用程序
的情况下,
EventListenerList
才变得方便?。对于一个简单的
JavaBean
应用程序,如果不使用
GUI组件
,那么使用一个组件比使用另一个组件有什么优势。

因为它只是-的一个特定的“子类”(扩展接口),它是一个标记接口,不定义任何方法,使用它比使用EventListenerList容易得多——这是因为如果您从EventListenerList开始,您将需要始终执行instanceof检查和强制转换,以获得侦听器的实际“业务”方法(因为它们都实现的接口没有方法)

一般来说,
PropertyChangeEvent
发生在对象的某些属性值更改时(您可以读取的属性/值),其中(常规)事件可以描述任何类型的事件(例如选择的更改或鼠标单击),它不必表示对象状态的更改

PropertyChangeSupport
是bean框架(特别是但不限于)GUI编辑器的一部分。这并不意味着您不能使用它,事实上,许多对象依赖于此功能,例如
SwingWorker
,还有许多来自SwingLabs的对象

考虑到这一点,当您希望通知相关方对象的属性/值发生更改时,应使用
ProperyChangeSupport
;当您希望为对象内发生的事件提供常规事件通知时,应使用
EventListenerList
(但不必与特定的财产或州有关)

我对
ProptertyChanegSupport
唯一的一个问题是,哪些属性绑定了,哪些没有绑定,这就不那么明显了,有时很难开始使用新对象,因为查找所有“addListener”方法都相当容易,但这只是我的问题


虽然我确信
eventlistenerlist
的初衷是用于GUI,但我以前在非GUI工作中使用过它们,但是如果您只支持一个侦听器,您可能会发现使用
列表
会更容易,只是说

取决于您的目标、实际需求和技能,我从来没有尝试过与EDT同步h/来自以编程方式存储在EventListenerList中的事件,否reason@mKorbel:您能详细说明一下吗?对于一个不使用GUI组件的简单JavaBean应用程序-对我来说似乎不存在(1.sight),有/没有具体的要点对于讨论,也不是详细阐述,这两个主题都是关于顶级技能和GUI应用程序的良好实践,EventListenerList应该用作各种事件的控制机制(而不是fireXxxEvent到EDT的源)是否有一个地方使用
PropertyChangeSupport
不起作用,而您必须使用
EventListenerList
?很多,看看
MouseListener
。没有“mouse”对象具有更改的属性。使用
MouseListener
的组件没有“have”更改其状态以响应鼠标事件,但在鼠标事件发生时提供事件通知。
ActionListener
JTextField
JButton
上。例如,(直接)更改组件的状态,但提供纯事件通知。通用侦听器通常比
PropertyListener
s更容易处理,因为它们有专门的方法来提供有关所发生事件的信息。