什么时候应该创建自己的TableModelListeners和DataModelEvents?

我知道DefaultTableModelAbstractTableModelTableModel的区别和用法。

我在许多在线Java示例中都看到过,其中在创建扩展DefaultTableModel和AbstractTableModel类的类(自定义模型)时显式创建了TableModelListeners和DataModelEvents。

这是我的理解:


如果我要扩展DefaultTableModel,那么此模型已经知道如何创建DataModelEvents和TableModelListeners(这样我就不必添加它们)侦听/观察这些事件,并且还知道通知TableModelListeners。
如果我要扩展AbstractTableModel,则此模型已经知道如何创建DataModelEvents和TableModelListeners(这样我就不必添加它们)侦听/观察这些事件。但是我必须显式调用firetablechanged()或类似方法来将事件通知给TableModelListeners。
如果我正在实现TableModel,则此模型已经知道如何创建DataModelEvents,但是没有任何TableModelListeners(因此我必须添加它们)来监听/观察这些事件。而且,我还必须显式调用firetablechanged()或类似方法来将事件通知给TableModelListeners。

最佳答案

我遵照DefaultTableModel上的@mKorbel,它非常适合可以依赖其直接变量的情况。它受内部使用Vector的限制,Collection是受支持但已过时的AbstractTableModel,它(可能)带有不必要的同步开销。

JTable在将应用程序的数据模型暴露于DefaultTableModel视图中提供了更多的flexibility。在JTable不适合的情况下应使用它。

专注于您的问题,TableModelListener实现了TableModel,并且监听了自己的DisplayPanel。任意数量的其他视图也可以侦听同一模型。 AbstractTableModel是侦听名为CheckModelTableModel的示例。如果TableModelEvent包含视图更新自身所需的数据,则应触发合适的EventListenerList。如果不是,则可以使用与JTable相同的机制(定义为here和提到的here)定义自己的事件类型。

10-05 18:38