Спасибо. Реализовал новую модель таблицы, добавив поле, в котором и хранятся данные.
| Код | import java.util.Vector; import javax.swing.SwingWorker; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableModel; import labgen.SQLite;
/** * * @author shtrih */ public class MyTableModel extends DefaultTableModel {
protected TableModelListener myTableModelListener; protected Vector<Object[]> cellMeta;
public MyTableModel(Object[] columnNames, int rowCount) { super(columnNames, rowCount);
int length = columnNames.length; cellMeta = new Vector<Object[]>(); for (int i = 0; i < rowCount; i++) { cellMeta.add(new Object[length]); for (int j = 0; j < length; j++) { cellMeta.get(i)[j] = ""; } }
myTableModelListener = new myTableModelListener(); addTableModelListener(myTableModelListener); }
class myTableModelListener implements TableModelListener {
public void tableChanged(final TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE) {
VedomostTableModel model = (VedomostTableModel) e.getSource(); final String[] ids = model.getCellMeta(e.getLastRow(), e.getColumn()).toString().split(","); // "1,2,3" // System.out.println(ids[0] +", "+ids[1] +", "+ ids[2]);
new SwingWorker() {
@Override protected Object doInBackground() throws Exception { SQLite.Update("Labs_ex", new String[]{"score"}, new String[]{getValueAt(e.getLastRow(), e.getColumn()).toString()}, "studentID = " + ids[0] + " AND labID = " + ids[1] + " AND exID", ids[2]); return null; } }.execute(); } } }
@Override public void insertRow(int row, Vector rowData) { super.insertRow(row, rowData);
int colCount = getColumnCount(); Object[] meta = new Object[colCount];
for (int j = 0, n = colCount; j < n; j++) { meta[j] = ""; } cellMeta.add(meta); }
public void setCellMetaAt(Object aValue, int row, int column) { this.cellMeta.elementAt(row)[column] = aValue; }
public Object getCellMeta(int rowIndex, int colIndex) { return cellMeta.get(rowIndex)[colIndex]; } }
|
|