Siccome so per esperienza che scrivere un TableModelListener può essere abbastanza seccante (le prime volte), ti posto un esempio con più o meno quello che vuoi fare tu (manca tutta la gestione di che cosa succede dopo l'aver totalizzato 100, ovvero quanto accade alla pressione del tuo famoso tasto). Non vuole assolutamente essere una guida (cosa per cui ti consiglio di guardare il link a cui ti hanno indirizzato e di fare qualche ricerca in internet), ma solo uno spunto.
codice:
import javax.swing.table.*;
import javax.swing.event.*;
import javax.swing.*;
/**
*
* @author Andrea
*/
public class JTableEvents extends JFrame {
public JTable table;
public int max = 100;
public int applyCorrection(TableModel model, int row, int col) {
int total = 0;
for (int i = 0; i < model.getRowCount(); i++) {
if (i != row) {
try {
total += Integer.parseInt((String)model.getValueAt(i, col));
}
catch (Exception e) {
}
}
}
return (max-total);
}
public int findTotal(TableModel model, int row, int col) {
int total = 0;
for (int i = 0; i < model.getRowCount(); i++) {
try {
total += Integer.parseInt((String)model.getValueAt(i, col));
}
catch (Exception e) {
}
//System.out.println("Parziale: "+total);
}
//System.out.println("Totale: "+total);
return total;
}
public JTableEvents() {
super("Table Events Demo");
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[] colonne = {"Numero #", "Valore database 1", "Valore database 2"};
Object[][] data = {
{"", "Pere", "Ben mature"},
{"", "Mele", "Bel colorito"},
{"", "Mandarini", "Verdi"},
{"", "Melograni", "Di stagione"}
};
table = new JTable(data, colonne);
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int col = e.getColumn();
// in verità questo poteva essere semplicemente
// int col = 0;
// in quanto tutto avviene solo nella prima colonna.
TableModel model = (TableModel)e.getSource();
int total = findTotal(model, row, col);
if (total > max) {
int newValue = applyCorrection(model, row, col);
model.setValueAt(newValue, row, col);
}
}
});
this.getContentPane().add(new JScrollPane(table));
this.setVisible(true);
}
public static void main (String[] args) {
new JTableEvents();
}
}
buon divertimento.