Operación automatica en la celda de un JTable?
Hola chicos estoy registrando un detalle en un JTable ya logro registrarlo todo en la BD, pero tengo una inquietud quiero que en mi columna Monto Total de la imagen se muestre la multiplicacion automaticamente termine de digitar dentro de la celda de la columna P.U.SOLES como se ve en la imagen. Existe un evento para eso?
https://www.dropbox.com/s/qp37tixiqzbn22d/Captura.PNG
- Inicie sesión o regístrese para enviar comentarios
Mi metodo
Este es el metodo que uso para la multiplicacion de CantRecib * PUSoles:
//Operación Editar
JTable jt = tblNIdet;
String strCanRecib= String.valueOf(jt.getValueAt(tblNIdet.getSelectedRow(),5));
BigDecimal bCanRecib = new BigDecimal(strCanRecib);
String strPUSoles = String.valueOf(jt.getValueAt(tblNIdet.getSelectedRow(), 6));
BigDecimal bPUSoles = new BigDecimal(strPUSoles);
BigDecimal resultMontoTotal = bCanRecib.multiply(bPUSoles);
int fila = tblNIdet.getSelectedRow();
tableModel.setValueAt(resultMontoTotal, fila, 7);
}
Me parece que no es posible
Me parece que no es posible oir por eventos en el texto, tendrías que esperar a que cambiara el valor con setValueAt()...
Puedes intentar poner un custom editor y a ese editor ponerle un keylistener.
Suerte
Eventos en JTable
Por el momento puedo hacer las operaciones dentro del JTable con un KeyPressed pero si van a registrar varios datos tienen que multiplicarse automaticamente.
Y justo uso lo que me dices @OscarRyz:
//Operación Editar multiplicar en Cell
JTable jt = tblNIdet;
String strCanRecib= String.valueOf(jt.getValueAt(tblNIdet.getSelectedRow(),5));
BigDecimal bCanRecib = new BigDecimal(strCanRecib);
String strPUSoles = String.valueOf(jt.getValueAt(tblNIdet.getSelectedRow(), 6));
BigDecimal bPUSoles = new BigDecimal(strPUSoles);
BigDecimal resultMontoTotal = bCanRecib.multiply(bPUSoles);
int fila = tblNIdet.getSelectedRow();
tableModel.setValueAt(resultMontoTotal, fila, 7);
}
Me podrias ayudar poner un custom editor y a ese editor ponerle un keylistener como dices Oscar!
Saludos
Un editor es un componente
Un editor es un componente que se utiliza en cada celda para capturar el valor. Me acuerdo que habia por ahi un problema capturando los eventos porque algun otro elemento los consumia.
Empieza intentando poner un textbox como tu custom editor y agregandole un key listener
Ejemplo de poner un JComboBox como editor aqui:
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#com...
Suerte
:-| import
:-|
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.EventObject;
class Ce {
public static void main( String ... args ) {
JFrame f = new JFrame();
JTable t = new JTable(2,2);
t.setDefaultEditor(Object.class, new TextEditor());
f.add(t);
f.pack();
f.setVisible( true );
}
}
class TextEditor implements TableCellEditor {
private JTextField f = new JTextField();
public TextEditor() {
f.addKeyListener( new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println( e );
}
});
}
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column) {
return f;
}
public Object getCellEditorValue() {
return f.getText();
}
public void removeCellEditorListener(CellEditorListener c) { }
public void addCellEditorListener(CellEditorListener c) { }
public boolean stopCellEditing() { return true;}
public void cancelCellEditing() {}
public boolean shouldSelectCell(EventObject anEvent) { return true; }
public boolean isCellEditable(EventObject anEvent) { return true; }
}