Código:
el codigo de la definicion de tabla es el siguiente this.jtblDetalle.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
if ( e.getType() == TableModelEvent.UPDATE ) {
TableModel modelo = ( (TableModel) ( e.getSource() ) );
int fila = e.getFirstRow();
int columna = e.getColumn();
System.out.println("fila "+fila+" columna "+columna);
}
}
});
Código:
como puedo hacer para que desde AbstractTableModel pueda seleccionar bien el numero de columna public class DetalleTableModel extends AbstractTableModel {
Validator v;
public boolean opcion = false;
private ArrayList<ArrayDetalle> listaDetalle;
private Class[] tipoColumnas = {Object.class, JTextField.class, java.lang.Integer.class, java.lang.Double.class, java.lang.Double.class};
private String[] columnas = {"Código", "Descripción","Cantidad", "Valor Unit.", "Valor Total"};
private boolean[] editables={true,true,true,false,false};
public FacturaTableModel() {
this.listaDetalle = new ArrayList<ArrayDetalle>();
}
public void addFacturaDetalle(ArrayDetalle objDetalle) {
this.listaDetalle.add(objDetalle);
fireTableDataChanged();
}
public void removerFacturaDetalle(int rowIndex) {
this.listaDetalle.remove(rowIndex);
fireTableDataChanged();
}
@Override
public int getRowCount() {
return this.listaDetalle.size();
}
@Override
public int getColumnCount() {
return columnas.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return this.listaDetalle.get(rowIndex).getCodProducto();
case 1:
return this.listaDetalle.get(rowIndex).getDesProducto();
case 2:
return this.listaDetalle.get(rowIndex).getCantidad();
case 3:
return this.listaDetalle.get(rowIndex).getPrecio();
case 4:
return this.listaDetalle.get(rowIndex).getPrecioTotal();
default:
return this.listaDetalle.get(rowIndex);
}
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
super.setValueAt(value, rowIndex, columnIndex);
switch (columnIndex) {
case 0:
this.listaDetalle.get(rowIndex).setCodProducto(String.valueOf(value));
break;
case 1:
this.listaDetalle.get(rowIndex).setDesProducto(String.valueOf(value));
break;
case 2:
this.listaDetalle.get(rowIndex).setCantidad(Integer.parseInt(value.toString()));
break;
case 3:
this.listaDetalle.get(rowIndex).setPrecio(Double.parseDouble(value.toString()));
break;
case 4:
this.listaDetalle.get(rowIndex).setPrecioTotal(Double.parseDouble(value.toString()));
break;
}
fireTableDataChanged();
}
@Override
public String getColumnName(int columnIndex) {
return this.columnas[columnIndex];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return tipoColumnas[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return editables[columnIndex];
}
public TableCellEditor getCellEditor(int rowIndex,int columnIndex) {
final JTextField field = new JTextField(getValueAt(rowIndex,columnIndex).toString());
final DefaultCellEditor edit = new DefaultCellEditor(field);
edit.setClickCountToStart(2);
field.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
field.selectAll();//Con esto al solicitar el editor, el texto queda seleccionado
}
@Override
public void focusLost(FocusEvent e) {
field.select(0,0);//De-selecciono el texto al perder el foco.
}
});
return edit;
}
}


