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; } }