gpt4 book ai didi

Java - TableModelListeners 和 DataModelEvents

转载 作者:行者123 更新时间:2023-11-29 07:10:32 25 4
gpt4 key购买 nike

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

我知道 DefaultTableModelAbstractTableModelTableModel 的区别和用途。

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

这是我的理解:

  1. 如果我要扩展 DefaultTableModel,那么这个模型已经知道如何创建 DataModelEvents 和 TableModelListeners(这样我就不必添加它们)监听/观察这些事件,并且知道通知 TableModelListeners。

  2. 如果我要扩展一个 AbstractTableModel,那么这个模型已经知道如何创建 DataModelEvents 和 TableModelListeners(这样我就不必添加它们)监听/观察这些事件。但我必须显式调用 firetablechanged() 或类似方法来通知 TableModelListeners 事件。

  3. 如果我正在实现一个 TableModel,那么这个模型已经知道如何创建 DataModelEvents,但是没有有任何 TableModelListeners(所以我必须添加它们)监听/观察这些事件。而且我还必须显式调用 firetablechanged() 或类似方法来通知 TableModelListeners 事件。

最佳答案

我在 DefaultTableModel 上遵从@mKorbel,它非常适合可以依赖其直接修改器的情况。它受到 Vector 内部使用的限制,Vector 是一个受支持但已过时的 Collection,它承载(可能)不必要的同步开销。

AbstractTableModel 提供更多 flexibility将应用程序的数据模型暴露给 JTable View 。它应该在 DefaultTableModel 不适合的情况下使用。

针对您的问题,JTable 实现了 TableModelListener,它会监听自己的 TableModel。任意数量的其他 View 也可以收听相同的模型; DisplayPanel是一个监听名为 CheckModelAbstractTableModel 的示例。如果您的 TableModel 包含您的 View 更新自身所需的数据,则它应该触发一个合适的 TableModelEvent。如果没有,您可以使用 JTable 使用的相同 EventListenerList 机制定义您自己的事件 types,描述 here ,并提到 here .

关于Java - TableModelListeners 和 DataModelEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com