1

いつ独自のTableModelListenersとDataModelEventsを作成する必要がありますか?

、、の違いと使い方DefaultTableModelを 知っています。AbstractTableModelTableModel

DefaultTableModelクラスとAbstractTableModelクラスのいずれかを拡張するクラス(カスタムモデル)を作成するときに、TableModelListenersとDataModelEventsが明示的に作成される多くのオンラインJavaの例を見てきました。

これは私の理解です:

  1. 私が拡張しているDefaultTableModel場合、このモデルは、DataModelEventsとTableModelListenersを作成する方法(追加する必要がないように)をすでに知っており、これらのイベントをリッスン/監視し、TableModelListenersに通知することも知っています。

  2. AbstractTableModelを拡張している場合、このモデルは、DataModelEventsとTableModelListenersを作成する方法をすでに知っているので(追加する必要はありません)、これらのイベントをリッスン/監視します。ただし、firetablechanged()または同様のメソッドを明示的に呼び出して、イベントについてTableModelListenersに通知する必要があります。

  3. TableModelを実装している場合、このモデルはDataModelEventsの作成方法をすでに知っていますが、これらのイベントをリッスン/監視するTableModelListenersを持っていません(追加する必要があります)。また、firetablechanged()または同様のメソッドを明示的に呼び出して、イベントについてTableModelListenersに通知する必要があります。

4

2 に答える 2

3
  1. DefaultTableModelextends AbstractTableModel)、デフォルトではすべての通知機能(DataModelEvents)が実装されており、デフォルトでは、編集可能(TableCellEditor必要な場合)およびColumn Class(ほとんどの場合は不要)のみをオーバーライドする必要があります。

  2. AbstractTableModel、すべてをオーバーライドする必要がありますrequired methods。そうしないと、と比較して機能せずDefaultTableModel、これらのメソッドの実装方法でのみ機能します。デフォルトでは、すべての通知機能(DataModelEvents)もオーバーライドする必要があります。そうしないと、JTables view適切な値または期待値が表示されません。

  3. DefaultTableModel時期尚早に基づいておりArrays(私が見HashMapたとしてもDefaultTableModel、問題はありません)、制限なしでAbstractTableModelさまざまな実装を可能にします(具体的な配列APIで実装されます)arrays types

  4. を使用DefaultTableModelすることにより、すべてが許可され、すべてにアクセスできます(APIで実装されたメソッド)AbstractTableModel

  5. AbstractTableModelメソッドの制限、変更、追加、またはオーバーライドについてです。

  6. JTable定義なしXxxTableModelで使用されます DefaultTableModel

于 2013-01-11T21:51:46.743 に答える
3

@mKorbel onを使用しますDefaultTableModel。これは、単純なミューテーターに依存できる場合に適しています。これは、 (おそらく)不必要な同期オーバーヘッドをVector伴う、サポートされているが廃止されたの内部使用によって制限されます。Collection

AbstractTableModelアプリケーションのデータモデルをビューに公開する際の柔軟性が大幅に向上しJTableます。DefaultTableModel不適切な場合に使用する必要があります。

あなたの質問に焦点を合わせ、JTable実装しTableModelListener、そしてそれはそれ自身を聞きTableModelます。の任意の数のビューも同じモデルをリッスンできます。名前付きDisplayPanelをリッスンする例です。ビューが自分自身を更新するために必要なデータが含まれている場合は、適切なものを起動する必要があります。そうでない場合は、で使用され、ここで説明され、ここで説明されているのと同じメカニズムを使用して、独自のイベントタイプを定義できます。AbstractTableModelCheckModelTableModelTableModelEventEventListenerListJTable

于 2013-01-12T03:18:59.233 に答える