Foro de elhacker.net

Programación => Java => Mensaje iniciado por: AlbertoBSD en 26 Febrero 2009, 19:21 pm



Título: [?] JTable getSelectedRow() KeyEvent Retrasado (Solucionado)
Publicado por: AlbertoBSD en 26 Febrero 2009, 19:21 pm
Bien de nuevo yo con los JTables previamente [?] JTable Seleccion de Filas Mediante Codigo. (Solucionado) (http://foro.elhacker.net/java/jtable_seleccion_de_filas_mediante_codigo_solucionado-t246609.0.html), ahora tengo un error al momento de tratar de procesar la linea seleccionada.

Código
  1.    private void jtMouseClicked(java.awt.event.MouseEvent evt) {
  2.        this.Actualizar_Formulario();
  3.    }
  4.  
  5.    private void jtKeyPressed(java.awt.event.KeyEvent evt) {
  6.        this.Actualizar_Formulario();
  7.    }
  8.  
  9.    private void Actualizar_Formulario()    {
  10.        int i = jt.getSelectedRow();
  11.        System.out.println("Linea: " + i);
  12.    }
  13.  

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:

Citar
Linea: 2

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

(http://i.elhacker.net/i?i=5lsoP-QmVjW2pOZLivLLHWVo) (http://i.elhacker.net/d?i=5lsoP-QmVjW2pOZLivLLHWVo)

Citar
Linea: 1

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

Citar
Linea: 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.




Título: Re: [?] JTable getSelectedRow() KeyEvent Retrasado
Publicado por: ~~ en 1 Marzo 2009, 00:57 am
El problema está en el evento que usas, usa KeyReleased :P Como veo que usas NetBeans, aquí la prueba xD

Código
  1. import javax.swing.table.*;
  2.  
  3. public class Main extends javax.swing.JFrame
  4. {
  5.  
  6.    private DefaultTableModel datos = new DefaultTableModel();
  7.  
  8.    public static void main(String args[]) { new Main().setVisible(true); }
  9.    public Main()
  10.    {
  11.        initComponents();
  12.  
  13.        datos.addColumn("Nombre del plan");
  14.        datos.addColumn("Asignado");
  15.        datos.addRow(new Object[]{"A1", "xD"});
  16.        datos.addRow(new Object[]{"A2", "o.0"});
  17.        datos.addRow(new Object[]{"A3", ":P"});
  18.        jt.setModel(datos);
  19.    }
  20.  
  21.    private void Actualizar_Formulario()    {
  22.        int i = jt.getSelectedRow();
  23.        System.out.println("Linea: " + i);
  24.    }
  25.  
  26.    // <editor-fold defaultstate="collapsed" desc="Generated Code">
  27.    private void initComponents() {
  28.  
  29.        jScrollPane1 = new javax.swing.JScrollPane();
  30.        jt = new javax.swing.JTable();
  31.  
  32.        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  33.  
  34.        jt.setModel(new javax.swing.table.DefaultTableModel(
  35.            new Object [][] {
  36.                {null, null, null, null},
  37.                {null, null, null, null},
  38.                {null, null, null, null},
  39.                {null, null, null, null}
  40.            },
  41.            new String [] {
  42.                "Title 1", "Title 2", "Title 3", "Title 4"
  43.            }
  44.        ));
  45.        jt.addKeyListener(new java.awt.event.KeyAdapter() {
  46.            public void keyPressed(java.awt.event.KeyEvent evt) {
  47.                jtKeyPressed(evt);
  48.            }
  49.            public void keyReleased(java.awt.event.KeyEvent evt) {
  50.                jtKeyReleased(evt);
  51.            }
  52.        });
  53.        jScrollPane1.setViewportView(jt);
  54.  
  55.        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  56.        getContentPane().setLayout(layout);
  57.        layout.setHorizontalGroup(
  58.            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  59.            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  60.                .addContainerGap(13, Short.MAX_VALUE)
  61.                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
  62.                .addContainerGap())
  63.        );
  64.        layout.setVerticalGroup(
  65.            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  66.            .addGroup(layout.createSequentialGroup()
  67.                .addContainerGap()
  68.                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
  69.                .addContainerGap(13, Short.MAX_VALUE))
  70.        );
  71.  
  72.        pack();
  73.    }// </editor-fold>
  74.  
  75. private void jtKeyReleased(java.awt.event.KeyEvent evt) {
  76.    Actualizar_Formulario();
  77. }
  78.  
  79. private void jtKeyPressed(java.awt.event.KeyEvent evt) {
  80.    //Actualizar_Formulario(); <-------- MAAAAL!!!
  81. }
  82.  
  83.  
  84.  
  85.  
  86.    // Variables declaration - do not modify
  87.    private javax.swing.JScrollPane jScrollPane1;
  88.    private javax.swing.JTable jt;
  89.    // End of variables declaration
  90.  
  91. }
  92.  

Salu2, E0N


Título: Re: [?] JTable getSelectedRow() KeyEvent Retrasado
Publicado por: AlbertoBSD en 1 Marzo 2009, 05:28 am
A valla era el evento, me imaginaba que era por ahi pero no sabia que otros eventos utilizar.

Muchas Gracias E0N

Saludos.


Título: Re: [?] JTable getSelectedRow() KeyEvent Retrasado (Solucionado)
Publicado por: ~~ en 1 Marzo 2009, 12:15 pm
De nada. Si usas NetBeans haces click derecho sobre el JTable Events -> Key y ahí tienes todos los eventos disponibles ;)

Salu2, E0N