1

アイテムのテーブルを作成するテーブルクラスがあります。テーブルモデルを使用して、これらのアイテムをJTableに表示したいと思います。私にとって、テーブルモデルは私のGUIパッケージに属していますが、テーブルは変更を実行するためにテーブルモデルを必要とし、テーブルモデルはそれを表示するためにテーブルクラスを必要とするため、2つを分離することはできません。これを行う必要がある場合、使用するクラス構造は何になりますか?または私は私の思考に流れがあり、それらは同じパッケージに属していますか?

4

5 に答える 5

3

ATableModelアダプターです。私は常にテーブル モデルを extends に記述し、AbstractTableModelそれを GUI パネル クラスのプライベート 内部クラスとして使用しています。いくつかのメソッドを入力するだけで済みます: getRowCountgetColumnCountおよびgetValueAt

GUI クラスは、この情報を入力できるコントローラーにアクセスできる必要があります。コントローラーがデータの更新を検出すると、GUI クラスに通知し、AbstractTableModel.fireTableDataChanged他の適切なメソッドを呼び出すことができます。

DefaultTableModelテーブルモデルのデータとコントローラーのデータの同期を保つ必要があるため、クラスを使用しないでください。JTable前述したように、テーブル モデルは、コントローラのデータを理解できる方法で表示するアダプタです。

于 2008-10-03T17:19:29.307 に答える
1

私にとって、テーブルモデルはウィジェットの一部、つまりGUIです。ビジネスロジッククラスのjavax.swingパッケージには依存しません。

したがって、アダプターまたはその他のメカニズムを使用して、ビジネスレイヤーからテーブルモデルをロードしますが、この程度の分離が役立つ場合があります。

決定はプロジェクトのサイズにも依存し、これよりもはるかに複雑になる可能性があります。たとえば、より抽象的なケースについては、 jgoodiesバインディングフレームワークとドキュメントを参照してください。

于 2008-10-03T14:14:02.050 に答える
1

モデルは、データを保持するビットです。このようなモデルと同様に、リスナーを維持および起動する必要があります。

ここで、データを変換したり、タイプを適合させたりするために、モデル内にある種の委任が必要になる場合があります。したがって、データは必ずしもjavax.swing.tableとは関係のないモデルオブジェクトにあります。次に、基になるモデルに委任するTableModelを実装します。そのTableModelを使用してJTableを作成しますが、基になるモデルへの参照はありません。

于 2008-10-03T14:18:18.300 に答える
1

重要なテーブルまたはリスト駆動型の開発を行っている人は誰でも、 Glazed Listsを確認することを強くお勧めします。私はカスタム TableModel と CellRenderers を何年も作成し、JGoodies などとバインドしてきました。 Glazed Lists のアプローチは驚くべきものです。

GL には 2 つの特徴があり、リスト ベースのデータ バインディングと処理のフレームワークとして選択しています。

  1. あなたがやりたい普通のことをするのはとてもとても簡単です
  2. あなたがやりたいかもしれない本当に、本当に難しいことを可能にします

見て、感動しないかどうかを確認してください。サンプル アプリで遊んでから、実際のコーディング プロセスを説明するスクリーン キャストをいくつか見ることを強くお勧めします。

于 2008-10-04T02:40:17.567 に答える
0

テーブルモデルは、配置されているテーブルについて何も知る必要はありません。テーブルモデルをモデルパッケージに入れ、テーブルをビューパッケージに入れます。コントローラは、モデルのモデルパッケージを要求し、テーブルのビューパッケージを要求し、そのモデルをテーブルに設定する責任があります。

于 2008-10-03T13:58:48.573 に答える