3

jtableにデータを表示する必要があるプロジェクトに取り組んでいます。jtables に関する多くのチュートリアルを見つけましたが、AbstractTableModel をカスタマイズする方法についてはほとんど見つかりませんでした。ほとんどの部分は準備完了のコードです。Oracle のページでも、この一般的な jtable チュートリアルを見つけましたが、AbstractTableModel とカスタマイズされたモデルの作成方法に関する情報はほとんどありません。Oracle Jtable チュートリアル 私はプログラミングに慣れていないので、スキルのレベルに応じたチュートリアルが必要です。よろしくお願いします。

4

1 に答える 1

21

AbstractTableModelには、上書きする必要のある3つのメソッドが含まれています。これらは:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

JTableはこれらのメソッドを使用して、フィールド(行と列)がいくつあるかを調べ、各フィールドの値(Object型として)を取得します。これらのメソッドを上書きする場合、使用するデータ型の種類はユーザー次第です。たとえば、2次元のオブジェクト配列を使用できます。

Object[][] data;

または配列のArrayList:

List<Object[]> data = new ArrayList<Object[]>();

固定サイズの配列の方が使いやすいかもしれませんが、動的に値を追加するのはより困難です。もちろん、マップやその他のデータ構造を使用することもできます。モデルに現在含まれている行数など、データ構造から適切な情報を返すには、上記の3つのメソッドの実装を調整する必要があります。

上書きできるが、上書きする必要のないメソッドもいくつかあります。たとえば、カスタム列名が必要な場合は、public String getColumnName(int col)メソッドをさらに上書きする必要があります。

たとえば、次のようになります。

private static final String[] COLUMN_NAMES = {"User", "Password", "Age"};
public String getColumnName(int col) {
    return COLUMN_NAMES[col];
}

上書き可能な他のメソッドの概要については JavadocforAbstractTableModelを参照してください。

TableModelのデータを変更できるようにする場合は、setValueAtメソッドを上書きする必要があります(私が間違っていない場合)。

void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    //depending on your data structure add the aValue object to the specified
    //rowIndex and columnIndex position in your data object
    //notify the JTable object:
    fireTableCellUpdated(row, col);
}

重要:行を追加または削除するときは常に、TableModel実装のそれぞれの関数がそれぞれのfireTableRowsInserted(または削除された)関数を呼び出す必要があります。そうしないと、JTableに奇妙な視覚効果が発生することがわかります。

public void addRow(Object[] dates) {
    data.add(dates);
    int row = data.indexOf(dates);
    for(int column = 0; column < dates.length; column++) {
        fireTableCellUpdated(row, column);
    }
    fireTableRowsInserted(row, row);
}
于 2012-04-26T21:03:28.810 に答える