1

Listof (5 つのフィールドを持つ、私Itemsが作成した独自のクラス) があるとします。どういうわけかこれらのアイテムをJTable.
そして、受信したものを変換し、それに基づいてアイテムから特定の値を取り出し、それを返して表示できるJTableようにするような、ある種のメソッドが必要です。public String determineColumnText(Object o, int col)ObjectItemcol

私は検索を試みましたが、作成するという多くの回答を見ましAbstractTableModelたが、私が見たすべてのチュートリアルでは、私が望むものは何も提供されていません. 私が見た中で最も近いpublic Object getValueAt(int rowIndex, int columnIndex)のは、表示したいすべてのオブジェクトを 内に格納する必要があることを意味しますAbstractTableModelObjectしかし、 を内部に格納するのではなくAbstractTableModel、同時に に送信できるようにしたい場合はどうすればよいでしょうかAbstractTableModel

これを行う方法について何か提案はありますか?

4

3 に答える 3

3

しかし、オブジェクトが AbstractTableModel 内に格納されないようにするにはどうすればよいでしょうか。

オブジェクトは常に TableModel 内に格納する必要があります。オブジェクトを外部で作成できますが、オブジェクトを TableModel に追加する必要があります。オブジェクトがモデルの一部になったら、TableModel メソッドを介してのみ操作する必要があります。

オブジェクトをモデルに格納できるが、必要に応じてデータを完全なオブジェクトとして取得できる TableModelについては、行テーブル モデルを参照してください。

getValueAt()独自のメソッドを実装するには、クラスを拡張する必要がありsetValueAt()ます。これらのメソッドは、オブジェクトの個々のプロパティにアクセスします。JButtonTableModel.java の例は、これを行う方法を示しています。

于 2013-10-31T15:02:47.697 に答える
1

オプション1:

  • アイテムのリストをループします。
  • すべてのセルのデータの配列を作成します
  • その配列をDefaultTableModelのコンストラクターに渡します。これを JTable で使用します。

オプション 2:

  • getValueAt()あなたが説明したように、DefaultTableModel と override を拡張します
  • リストへの参照をテーブル モデルに保存する

オプション 1 は、データが変更されていない場合は単純です。オプション 2 は最も柔軟ですが、説明されていないオブジェクトがあるようです。

于 2013-10-31T15:02:37.433 に答える
0

AbstractTableModel を使用してテーブルにデータを入力する方法を貼り付けます。

public class InventoryModel extends AbstractTableModel {

private static final String[] columnNames = { "Owner", "Location", "Sample Name", "Form Factor" };
private List<Samples> samplesList;

public InventoryModel(){
    samplesList = SampleQueries.getAvailableSamples();

}

@Override
public int getColumnCount() {
    // TODO Auto-generated method stub
    return columnNames.length;
}

@Override
public int getRowCount() {
    return samplesList.size();
}

@Override
public String getColumnName(int column) {
    return columnNames[column];
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    switch (columnIndex) {
    case 0:
        return samplesList.get(rowIndex).getCurrentOwner();
    case 1:
        return samplesList.get(rowIndex).getSampleLocation();
    case 2:
        return samplesList.get(rowIndex).getSampleName();
    case 3:
        return samplesList.get(rowIndex).getFormFactor();
    }
    return null;
}   

そして、これが私がパネルから呼び出す方法です。

    table = new JTable();
    model = new InventoryModel();
    model.fireTableDataChanged();
    panel.setLayout(new BorderLayout(0, 0));
    table.setModel(model);

    JScrollPane scroll = new JScrollPane(table);
    panel.add(scroll);

それがあなたのために働くことを願っています

于 2013-10-31T15:04:01.363 に答える