public synchronized void pvChanged(PvChangeEvent event){
  Object key;
  int rowId;
  try {
    if (event.isChildEvent()) {
      key=String.valueOf(event.getValue());
    }
 else {
      key=event.getKey();
    }
    rowId=key != null ? Arrays.binarySearch(keys,key) : 0;
switch (event.getType()) {
case PvChangeEvent.PV_CONFIRMED:
case PvChangeEvent.PV_MODIFIED:
case PvChangeEvent.PV_MANUAL_MOD:
      fireTableRowsUpdated(rowId,rowId);
    break;
case PvChangeEvent.PV_ADDED:
  if (pv.size() == 1) {
    setProcessVar(pv);
  }
 else {
    updateKeys(pv);
    fireTableRowsInserted(rowId,rowId);
  }
break;
case PvChangeEvent.PV_DELETED:
updateKeys(pv);
fireTableRowsDeleted(rowId,rowId);
break;
case PvChangeEvent.PV_CLEARED:
if (keys.length > 0) {
updateKeys(pv);
}
fireTableStructureChanged();
break;
}
}
 catch (Exception ex) {
ex.printStackTrace();
}
}

public synchronized void pvChanged ( PvChangeEvent event ) { Object key ; int rowId ; try { if ( event . isChildEvent ( ) ) { key = String . valueOf ( event . getValue ( ) ) ; } else { key = event . getKey ( ) ; } rowId = key != null ? Arrays . binarySearch ( keys , key ) : 0 ; switch ( event . getType ( ) ) { case PvChangeEvent . PV_CONFIRMED : case PvChangeEvent . PV_MODIFIED : case PvChangeEvent . PV_MANUAL_MOD : fireTableRowsUpdated ( rowId , rowId ) ; break ; case PvChangeEvent . PV_ADDED : if ( pv . size ( ) == 1 ) { setProcessVar ( pv ) ; } else { updateKeys ( pv ) ; fireTableRowsInserted ( rowId , rowId ) ; } break ; case PvChangeEvent . PV_DELETED : updateKeys ( pv ) ; fireTableRowsDeleted ( rowId , rowId ) ; break ; case PvChangeEvent . PV_CLEARED : if ( keys . length > 0 ) { updateKeys ( pv ) ; } fireTableStructureChanged ( ) ; break ; } } catch ( Exception ex ) { ex . printStackTrace ( ) ; } }
handle a process variable change
