1

SwingでJTablesを使用する方法を学んでいます。データベースに接続して結果セットを取得することはすでにわかっています。最初のオプションを使用してデータを表示することもできます (以下を参照)。

a) TableModel を使用/渡すという考え方と、行と列を直接渡すという考え方を理解していることを確認したいのは、AbstractTableModel で利用可能な組み込みメソッドを使用できるようにすることです。DefaultTableModel および ListTableModel クラス。

b) カスタム TableModel とは何ですか?

これまでのところ、私は4つの方法に出くわしました:

  1. 列と行をオブジェクトとして直接 JTable コンストラクターに渡します。

元:

JTable tab = new JTable(Object [][] rows, Object[] cols);

2. AbstractTableModel を実装するクラスからテーブル モデルを作成します。

元:

MyModel model = new MyModel(Object[][] obj1, String[] header);

//MyModel is a class that extends AbstractTableModel. 
//MyModel has an ArrayList<Object[]> to store obj1[]
//MyModel implements getRowCount(), getColumnCount() and 
getValueAt(int rowIndex, int columnIndex) and also getColumnName(int index)

JTable tab = new JTable(model);

3.DefaultTableModel を実装するクラスからテーブル モデルを作成します。

元:

DefaultTableModel model = new DefaultTableModel(String data[][],String col[]);
(or)
DefaultTableModel model = DefaultTableModel(Vector data, Vector columnNames) 

JTable table = new JTable(model);

4.リストテーブルモデル

4

1 に答える 1

3

データを直接渡すと、JTable は DefaultTableModel を内部的に作成します。これは、 を呼び出して取得できますtable.getModel()

異なる TableModel には異なる機能があり、TableModel を実装するか、AbstractTableModel (または DefaultTableModel) を拡張するクラスを作成することにより、独自の機能を実装できます。この背後にある考え方は、生のテーブル データ以上のものを必要とする場合があるということです。

たとえば、オブジェクトを各行にアタッチする場合: 行ごとにオブジェクトを保持し、 や などのメソッドを提供する TableModel を作成できObject getObject(int rowIndex)ますvoid setObject(int rowIndex, Object object)。これを行うには、オブジェクトを含み、常に行の量と同じサイズの追加の配列またはリストを TableModel 内に保持します。

別の理由として、スクロール中に tablemodel が行データをロードしたり、複数のデータ ソースからのデータを動的に表示したりすることが考えられます。

TableModel は必ずしもデータを保持する必要はなく、JTable にデータを提供するだけです。

于 2012-11-14T00:03:40.447 に答える