Estoy intentando crear un verificador de entrada simple para una JTable. Terminé anulando el método: editingStopped(). El problema es que el evento no incluye información sobre la celda que se ha actualizado.JTable Input Verifier
Este es mi "pseudo código":
If (user finished editing a cell) {
Check if cell`s value is "1" or "0" or "-" (Karnaugh-Veitch)
If (check = false)
setValue (cell, "");
}
El primero que probé fue esta aquí:
table.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
inputVerify (e.getColumn(), e.getFirstRow());
}
});
public void inputVerify (int column, int row) {
boolean verified = true;
String field = table.getValueAt(row, column).toString();
if (field != null && field.length() == 1) {
if (!(field.charAt(0) == '0' || field.charAt(0) == '1' || field.charAt(0) == '-'))
verified = false;
}
else {
verified = false;
}
if (!verified) {
table.getModel().setValueAt("", row, column);
java.awt.Toolkit.getDefaultToolkit().beep();
}
System.out.println ("Column = " + column + " Row = " + row + " Value = " + table.getValueAt(row, column) +" Verified = "+verified);
}
Pero esto termina con una: StackOverflow Excepción. Supongo que el problema es que: setValueAt (..) desencadena otro evento tableChanged() y se está generando un bucle infinito.
Ahora, he intentado esto aquí:
table.getDefaultEditor(Object.class).addCellEditorListener(new CellEditorListener() {
// called when editing stops
public void editingStopped(ChangeEvent e) {
// print out the value in the TableCellEditor
System.out.println(((CellEditor) e.getSource()).getCellEditorValue().toString());
}
public void editingCanceled(ChangeEvent e) {
// whatever
}
});
Pero como se puede ver que sólo puede recuperar el nuevo valor de la celda, no las "coordenadas". Necesito llamar al método setValueAt (..), pero no sé cómo obtener las coordenadas de la celda.
¿O hay una manera más simple de crear un verificador de entrada?
Saludos Ioannis K.
no, que no quieren llamar setValueAt, por lo que no necesita las coordenadas :-) – kleopatra