Esattamente, ci sono arrivato poco fa. Praticamente io ho una tabella di questo tipo:
ingrediente1 | quantità1 | costo1
ingrediente2 | quantità2 | costo2
ingrediente3 | quantità3 | costo3
…
e così via.
Effettuando una modifica per esempio a quantità1 dovrei aggiornare quantità2 e quantità3 in quanto sono legati in percentuale a quantità1, e di conseguenza aggiornare i costi in base alla quantità, come se fosse per esempio una ricetta. Il problema è che una volta recuperati i valori delle celle che mi interessano e modificati non saprei sinceramente come aggiornare la tabella in quanto come hai detto la gestione mi va in loop.
Ti posto un po' di codice:
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){
}
}
}