Ver Mensaje Individual
  #2  
Antiguo 11-09-2010
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Reputación: 17
Negriz Va por buen camino
Talking Hola!

Bueno, despues de mucho buscar, lo he solucionado no es exactamente lo que queria, pero funciona mas o menos parecido ^.^, dejo mi solucion en caso de que a alguien le sirva.

1) Sobre-escribi el metodo getCellEditor de mi JTable.
Código:
public TableCellEditor getCellEditor(int row, int col) {
        final JTextField field = new JTextField(getValueAt(row,col).toString());
        final DefaultCellEditor edit = new DefaultCellEditor(field);
        edit.setClickCountToStart(1);
        field.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent e) {
                field.selectAll();//Con esto al solicitar el editor, el texto queda seleccionado
            }
            public void focusLost(FocusEvent e) {
                field.select(0,0);//De-selecciono el texto al perder el foco.
            }
        });
        return edit;
Con esto cada celda reacciona como un JTextField y al obtener el foco selecciona todo su texto.
Esto no solucionaba mi problema debido a que cuando comenzaba la edicion desde el teclado y no con doble click (o un solo click) el texto se adjuntaba al existente, asi que para solucionar esto agregue un listener a la JTable que escuchara el evento KeyRelased y solicitara el foco cuando se presionara una tecla, asi se simulaba el doble click del mosue.
Código:
tabla.addKeyListener(new java.awt.event.KeyAdapter() {
    public void keyReleased(java.awt.event.KeyEvent e) {
        if (!jTable1.isEditing() && jTable1.editCellAt(jTable1.getSelectedRow(), jTable1.getSelectedColumn())) {
            jTable1.getEditorComponent().requestFocusInWindow();
        }
    }
});
Aunque no es una solucion muy elegante, funciona. Solo me falta definir que si es VK_ESCAPE, cancele la edicion y si es VK_ENTER pare la edicion (bueno eso espero :P)...
Un saludo.
__________________
Gracias!
Responder Con Cita