Stavo proprio cercando di creare un table model custom come dici tu. Ti posto il codice:
Sostanzialmente la mia tabella è di questo tipo:codice:... model = new MyTableModel(); model.setDataTable(Query); model.addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { int col = e.getColumn(); int row = e.getFirstRow(); String valoreInserito = model.getValueAt(row,col).toString(); System.out.println(valoreInserito); float valore = Float.parseFloat(valoreInserito); System.out.println(valore); int i = d.TotRow(Query); String prova = null; for(int k=0;k<i;k++){ String uno = model.getValueAt(k, col); float tre = Float.parseFloat(String.valueOf(uno)); if(tre != valore){ tre += 1; prova = String.valueOf(tre); model.setValueAt(prova, k, col); } } } }); //MyTableModel import DAO.ConnectionDAO; import java.awt.*; import java.sql.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; import java.util.Vector; class MyTableModel extends AbstractTableModel { // Variabili di istanza // ----------------------------------------------------------------------- private Vector<Vector<String>> data; private Vector<String> columnName; private PreparedStatement SQLPreparedStatement; // ----------------------------------------------------------------------- MyTableModel() { data = new Vector<Vector<String>>(); columnName = new Vector<String>(); } public int getColumnCount() { if(columnName == null) return -1; return columnName.size(); } public int getRowCount() { return data.size(); } public String getColumnName(int col) { if(col >= columnName.size()) return null; return columnName.elementAt(col); } public Class getColumnClass(int c) { return String.class; } // La prima colonna non e' modificabile public boolean isCellEditable(int row, int col) { if(col == 0) return false; else return true; } public String getValueAt(int row, int col) { Vector<String> v = data.elementAt(row); return v.elementAt(col); } public void setValueAt(Object value, int row, int col) { Vector<String> v = data.elementAt(row); v.setElementAt((String)value, col); fireTableCellUpdated(row,col); } public void setDataTable(String Query){ final ConnectionDAO d = new ConnectionDAO(); Connection cn = null; try { Class.forName("com.mysql.jdbc.Driver"); cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Miscele?user=root&password=m4c3nro3"); SQLPreparedStatement = cn.prepareStatement(Query); ResultSet rsQuery = SQLPreparedStatement.executeQuery(); ResultSetMetaData rsmt = rsQuery.getMetaData(); int column = rsmt.getColumnCount(); for(int i=1;i<=column;i++){ columnName.add(rsmt.getColumnName(i)); } while(rsQuery.next()){ Vector row = new Vector(column); for(int i=1;i<=column;i++){ row.addElement(rsQuery.getObject(i)); } data.add(row); } cn.close(); }catch(Exception e){ } } }
ingrediente1 | quantità1 | costo1
ingrediente2 | quantità2 | costo2
ingrediente3 | quantità3 | costo3
…
e così via.
Immagina di aver una ricetta e poterne modificare le dosi. Modificando quantità1 mi serve aggiornare quantità2 e quantità3 poiché sono legati in percentuale a quantità1, e di conseguenza vanno aggiornati anche i costi in base alla quantità di ingrediente utilizzato. Purtroppo però proprio come dicevi tu una volta recuperati i valori delle celle e modificati, non riesco ad aggiornare la tabella con i nuovi valori poiché la gestione va in loop.

Rispondi quotando
