1

これまで、適切な Java Swing コンポーネントに対して異なるモデル クラスを使用していましTableModelJTable。すべてJTableに独自の がありTableModelます。は、必要なすべてのデータを提供TableModelする 1 つのオブジェクト ( ) に基づいています。Modelこのようなもの:

public class MyTableModel extends AbstractTableModel {

Model model;

でも今は変えたいと思っています。私のインターフェースは、 の複数のインスタンスの可能性を提供しますModel。私の質問は、どうすればいいですか?

  • から複数のオブジェクトをインスタンス化するMyTable
  • ユーザーの操作時にモデルへの現在の参照を動的に変更する

したがって、私が直面している基本的な問題は、同じものJTableを同じものと一緒に使用したいということですTableModel。複数を使用するTableModel必要がありますか、それともデータ ソースへの変更参照を使用する必要がありますか?


同様の質問:

複数のタブを提供したいのですが、それらは基になるモデルのインスタンスを変更します。タイプは変更されませんが、現在のインスタンスは変更されます。つまり、データが変更されます。

私は今すべきですか:

  • ビュー コンポーネントの複数のオブジェクトをインスタンス化しますか? JTableたとえば、利用可能なすべてのモデルに対して、独自の, JPanel,JScrollPaneオブジェクトをインスタンス化しますか?
  • タブ付きペインの変更イベントをリッスンして動的に変更する 基になるモデルの参照
4

2 に答える 2

2

テーブルの構造が同じままで(つまり、同じ数の列、同じタイトル、同じ列クラス)、その内容のみが変更される場合は、同じモデルインスタンスを保持しながら、データを変更する必要があります(そしてを呼び出しますfireTableDataChanged)。これにより効率が向上し、現在の列の順序、現在の並べ替えられた列などを維持できるようになります。

テーブルの構造が完全に変更された場合、モデル自体の変更はおそらく簡単です。を呼び出すこともできますがfireTableStructureChanged、このメソッドのjavadocには次のように書かれています。

これは、JTableでsetModel(TableModel)を呼び出すのと同じです。

タブに関しても、同じルールに従うことができます。

于 2011-06-29T13:17:11.850 に答える
1

異なるモデルを持つ異なるタブを持つ複数のタブがある場合、答えは簡単です。異なるテーブルが必要です。タブごとに少なくとも1つ。

繰り返しますが、複数のタブがある場合は、複数のJScrollPanesなども必要になります。

ただし、テーブルの場所が1つしかない場合は、テーブルにカスタムなことをしていなければ、1つのJTableと複数のモデルで済ますことができる場合があります。(mKorbelのコメントを参照してください)。どちらの方法でも、同じJScrollPaneを再利用できます。

于 2011-06-29T13:17:55.717 に答える