Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   JAVA (https://www.clubdelphi.com/foros/forumdisplay.php?f=16)
-   -   Limpiar antes de editar celda en Jtable (https://www.clubdelphi.com/foros/showthread.php?t=69823)

Negriz 11-09-2010 02:15:09

Limpiar antes de editar celda en Jtable
 
Hola amigos del club delphi, mi pregunta es algo rara de expresar asi que coemnzare con lo que quiero hacer.

En excel cuando comienzas a editar una celda a travez del teclado el valor que esta almacendo en ella se borra y da paso al nuevo valor, haciendo doble click el valor anterior no se modifica. En ambos casos el valor anterior regresa persionando la tecla escape.

En un JTable, en ambos casos el valor antiguo continua estando en la celda al momento de editarla.

Lo que quiero hacer es que al modificar la celda utilizando el teclado el valor que esta contenga se borre, pero en caso de que sea doble click lo mantenga.

He probado con el metodo isCellEditable() para que antes de retornar true en caso de que se pueda editar la celda, modificando el valor de la celda, pero este metodo es llamando cuando se selecciona la celda no cuando es editada.

Ademas probe con addPropertyChangeListener sbreescribiendo el metodo PropertyChange.

Código:

public static final String CELL_EDITOR_PROPERTY = "tableCellEditor";
private void PropertyChange(java.beans.PropertyChangeEvent evt) {
  if (CELL_EDITOR_PROPERTY.equals(evt.getPropertyName())) {
            //Se esta editando la celda
            int editingRow = ((javax.swing.JTable)evt.getSource()).getEditingRow();
            int editingColumn = ((javax.swing.JTable)evt.getSource()).getEditingColumn();
  }
}

Pero no logro modificar el valor para que este se borre antes de comenzar la edicion.
alguna sugerencia? muchas gracias.

Negriz 11-09-2010 18:38:05

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.

xibx 09-02-2017 23:46:38

Ayuda
 
Hola,

Me gustaría q me ayudes a usar tu código del TableCellEditor please!!! Soy nueva en esto por favor ayudame!

Casimiro Notevi 10-02-2017 00:01:19

Bienvenida a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)

AlexSC 24-05-2018 21:34:43

Ayuda
 
Oye y como sobreescribiste el metodo getCellEditor?

en que clase lo sobreescribiste??

o donde lo estas utilizando? ya que al hacer el keyevent no miro que hagas referencia del getCellEditor? :confused::confused:

y si tu dices que lo agregaste a la tabla.... tu creaste la tabla desde 0 por eso le agregaste ese elemento?
o
tu jalaste una tabla del swing y le agregaste esa programacion del getCellEditor? y si lo hiciste asi como se lo agregaste?

ecfisa 24-05-2018 22:26:14

Hola AlexSC.

La última vez que Negriz anduvo por estos foros fué allá, por el 2010... Te aconsejo formular tu problema en una nueva consulta.

Saludos :)


La franja horaria es GMT +2. Ahora son las 11:25:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi