[?] JTable getSelectedRow() KeyEvent Retrasado (Solucionado)

Iniciado por AlbertoBSD, 26 Febrero 2009, 19:21 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

Bien de nuevo yo con los JTables previamente [?] JTable Seleccion de Filas Mediante Codigo. (Solucionado), ahora tengo un error al momento de tratar de procesar la linea seleccionada.

Código (java) [Seleccionar]

    private void jtMouseClicked(java.awt.event.MouseEvent evt) {
        this.Actualizar_Formulario();
    }

    private void jtKeyPressed(java.awt.event.KeyEvent evt) {
        this.Actualizar_Formulario();
    }

    private void Actualizar_Formulario()    {
        int i = jt.getSelectedRow();
        System.out.println("Linea: " + i);
    }


Con el mouse todo va bien Selecciono la primera linea y me devuelve 0, la tercera me devuelve 2 etc.
pero con las flchas del teclado es diferente, estoy en la tercera fila y con la UP, me dice:

CitarLinea: 2

Y la linea seleccionada es la Segunda (deberia de decir 1), le doy nuevamente UP, ahora:



CitarLinea: 1

Y la linea seleccionada es la Primera (deberia de decir 0), le doy nuevamente UP

CitarLinea: 0

Ahora eso si que desconseraria, ya que dependiendo de la fila en la tabla que se seleccione va a procesar la entrada, si es con el mouse no hay problema, pero si es con el teclado si y no deberia.

¿Que podria estar pasando?

Voy a agregar un filtro que verifique si es el campo ya lo habia validado pero eso es para despues de que se seleccione directamente la fila a procesar.

Creo que la cosa esta con el evento del key pero no tengo mucha experiencia en ello.

Saludos y Gracias de Antemano.


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

~~

#1
El problema está en el evento que usas, usa KeyReleased :P Como veo que usas NetBeans, aquí la prueba xD

Código (java) [Seleccionar]

import javax.swing.table.*;

public class Main extends javax.swing.JFrame
{
   
    private DefaultTableModel datos = new DefaultTableModel();
   
    public static void main(String args[]) { new Main().setVisible(true); }
    public Main()
    {
        initComponents();
       
        datos.addColumn("Nombre del plan");
        datos.addColumn("Asignado");
        datos.addRow(new Object[]{"A1", "xD"});
        datos.addRow(new Object[]{"A2", "o.0"});
        datos.addRow(new Object[]{"A3", ":P"});
        jt.setModel(datos);
    }

    private void Actualizar_Formulario()    {
        int i = jt.getSelectedRow();
        System.out.println("Linea: " + i);
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jt = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jt.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jt.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jtKeyPressed(evt);
            }
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jtKeyReleased(evt);
            }
        });
        jScrollPane1.setViewportView(jt);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(13, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(13, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

private void jtKeyReleased(java.awt.event.KeyEvent evt) {
    Actualizar_Formulario();
}

private void jtKeyPressed(java.awt.event.KeyEvent evt) {
    //Actualizar_Formulario(); <-------- MAAAAL!!!
}


   

    // Variables declaration - do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jt;
    // End of variables declaration

}


Salu2, E0N

AlbertoBSD

A valla era el evento, me imaginaba que era por ahi pero no sabia que otros eventos utilizar.

Muchas Gracias E0N

Saludos.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

~~

De nada. Si usas NetBeans haces click derecho sobre el JTable Events -> Key y ahí tienes todos los eventos disponibles ;)

Salu2, E0N