Есть JTable, есть модель собственноручно написанная:
| Код | class getTable extends AbstractTableModel {
private ResultSet rs; private ResultSetMetaData rsm;
public getTable(ResultSet rs) { try { this.rs = rs; this.rsm = rs.getMetaData(); } catch (Exception ex) { ex.printStackTrace(); } }
public Object getValueAt(int r, int c) { try { rs.absolute(r+1); return rs.getObject(c+1); } catch (Exception ex) { ex.printStackTrace(); return null; } } public void setValueAt(Object val, int r, int c) { // r=val; try { // rs.move // rs.updateString(c, val.toString()); rs.absolute(r+1); rs.updateString(c, val.toString()); // fireTableDataChanged(); fireTableCellUpdated(r, c); } catch (Exception ex) { ex.printStackTrace(); } } public int getRowCount() { try { rs.last(); return rs.getRow(); } catch (Exception ex) { ex.printStackTrace(); return 0; } }
public int getColumnCount() { try { return rsm.getColumnCount(); } catch (Exception ex) { ex.printStackTrace(); return 0; } } @Override public boolean isCellEditable(int r, int c) { return c==0||c==1||c==2; } }
|
Данные беру из базы:
| Код | Connection conn = null; //getTable.getCon(); try { Class.forName("com.mysql.jdbc.Driver"); conn = getTable.getCon(); java.sql.Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("SELECT * FROM travel"); CachedRowSet crs = new CachedRowSetImpl(); crs.populate(rs); jTable1.setModel(new getTable(crs)); // jTable1.getModel().addTableModelListener(new ChangeTable(jTable1)); } catch (Exception ex) { ex.printStackTrace(); } finally { try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } }
|
В итоге когда начинаю редактировать ячейку, и после того как она теряет фокус, модель не изменяется - данные осатются такими же.... Код привёл. Укажите, плиз, на мою ошибку....
Добавлено через 6 минут и 10 секунд всё всем спасибо!!! В индексах метода setValueAt накосчил |