それがどのように機能するかを理解するために、完全なテーブルモデルの例をお勧めします。また、リストをデータとして使用します。最も重要なことは、データを格納するために独自の変数を使用するようにAbstractTableModelを拡張する必要があることです。ソース コードの完全なサンプルを次に示します。
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class MouseClickTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = -1807522184370383957L;
private final String[] columnNames = { "Sr", "X", "Y", "Delay (ms)",
"Comment" };
public final Class[] mColTypes = { Integer.class, Integer.class,
Integer.class, Integer.class, String.class };
private final List<MouseClick> data;
public MouseClickTableModel(){
data = new ArrayList<MouseClick>(10);
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.size();
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
final MouseClick currentRow = (MouseClick) data.get(row);
switch (col) {
case 0:
return currentRow.getSequNb();
case 1:
return currentRow.getXcoo();
case 2:
return currentRow.getXycoo();
case 3:
return currentRow.getDelay();
case 4:
return currentRow.getComment();
}
return new String();
}
public Class getColumnClass(int c) {
return mColTypes[c];
}
/*
* Don't need to implement this method unless your table's editable.
*/
public boolean isCellEditable(int row, int col) {
return false;
}
public void updateRow(Object value, int row, int col) {
}
/*
* Don't need to implement this method unless your table's data can change.
*/
@Override
public void setValueAt(Object value, int row, int col) {
MouseClick currentRow = null;
if (row >= data.size()) {
// new data
currentRow = new MouseClick();
data.add(0, currentRow);
}
// update row
else {
currentRow = (MouseClick) data.get(row);
}
switch (col) {
case 0:
currentRow.setSequNb(((Integer) value).intValue());
break;
case 1:
currentRow.setXcoo(((Integer) value).intValue());
break;
case 2:
currentRow.setXycoo(((Integer) value).intValue());
break;
case 3:
currentRow.setDelay(((Integer) value).intValue());
break;
case 4:
currentRow.setComment(((String) value).toString());
break;
}
// update
fireTableCellUpdated(row, col);
}
public MouseClick getData(int row) {
return data.get(row);
}
public void addMouseClick(MouseClick mc) {
insertMouseClick(getRowCount(), mc);
}
public void insertMouseClick(int row, MouseClick mc) {
data.add(row, mc);
fireTableRowsInserted(row, row);
}
public void removeMouseClick(int row) {
data.remove(row);
fireTableRowsDeleted(row, row);
}
}
次に、UI デザインでモデルを更新するだけです。
JTable table = new JTable(new MouseClickTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
MouseClickTableModel model = getTable().getModel());
model.insertMouseClick(0, new MouseClick(0, Integer.valueOf(xValue), Integer.valueOf(yValue), 2000, "comment"));