Author Topic: mouseClicked en fila de JTable falla ocasionalmente  (Read 36 times)

eduar2083

  • Full Member
  • ***
  • Posts: 102
  • Karma: 0
    • View Profile
mouseClicked en fila de JTable falla ocasionalmente
« on: Noviembre 14, 2017, 08:01:51 pm »
Buenas,
Tengo un JTable al cual al hacer click en una de sus filas, capturo los datos para mostrarlos en otros controles pero sucede que en ocasiones no obedece y se queda seleccionado el elemento que estaba previamente a pesar de haber hecho click sobre otra fila.
Code: [Select]
tablaCama.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
mouseClickedGrilla();
}
});
Code: [Select]
private void mouseClickedGrilla() {
try {
int fila = tablaCama.getSelectedRow();
System.out.println("Fila " + fila + " seleccionada");

String nroCama = tablaCama.getValueAt(fila, 0).toString();

EntCama_Reg c = lc.obtener(Integer.parseInt(nroCama));   // Leer desde un RandomAccessFile
establecerValores(c);   // Muestra los datos del registro en otros controles para su edición
estableceTipoOperacion(Enumeraciones.TipoOperacion.ACTUALIZAR);
estadoControles(true, 3); // Habilita-deshabilita controles

System.out.println("Se obtuvieron los datos");
} catch (Exception e) {
Alerta.mensaje(this, "Ocurrió un error: " + e.getMessage(), Enumeraciones.TipoMensaje.ERROR);
}
}
No entiendo porqué a veces funciona bien y a veces se queda seleccionado el elemento que estuvo previamente.
Favor su apoyo, muchas gracias.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5421
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #1 on: Noviembre 14, 2017, 08:24:41 pm »
Hola

¿No sale el mensaje de alerta que has puesto?

Saludos.

eduar2083

  • Full Member
  • ***
  • Posts: 102
  • Karma: 0
    • View Profile
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #2 on: Noviembre 14, 2017, 08:56:22 pm »
No chuidiang, no muestra la alerta. Pensaba también que fallaba al acceder al archivo pero el acceso es correcto, lo que ha notado es que al parecer a veces no entra al controlador de evento ya que al observar la impresión por Consola, no escribe el índice de la fila seleccionada:

eduar2083

  • Full Member
  • ***
  • Posts: 102
  • Karma: 0
    • View Profile
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #3 on: Noviembre 14, 2017, 09:03:59 pm »
Estaba pensando que quizás sea porque al cambiar rápidamente la selecciòn de una fila a otra el acceso al archivo tarda un poco, pero igual debería encolarse el evento

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5421
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #4 on: Noviembre 14, 2017, 09:34:08 pm »
Hola:

Ante el mismo evento, click, depende de qué se trate antes, si la selección por parte del JTable o tu código.

Prueba mejor a suscribirte a un cambio de selección, en vez de al click

elJtable.getSelectionModel().addListSelectionLIstener ( ....);

Así seguro que te avisan en el momento que haya un cambio en la selección.

O si quieres, por descartar cosas, prueba a comentar temporalmente todo el código dentro del método mouseClickedGrilla(), excepto el System.out, así ves si es consecuencia del código que hay detrás o va por otro lado.

Saludos.

eduar2083

  • Full Member
  • ***
  • Posts: 102
  • Karma: 0
    • View Profile
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #5 on: Noviembre 14, 2017, 10:20:36 pm »
Gracias chuidiang, con este controlador de evento va mejor y de momento no hay fallo, sin embargo, veo que se ejecuta 2 veces con lo cual irá 2 veces a consultar el archivo de datos, cómo podria hacer para que se ejecute una sola vez.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5421
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #6 on: Noviembre 14, 2017, 11:03:27 pm »
Imagino que te avisa dos veces, que se ha deseleccionado la fila anterior y que se selecciona la nueva. Mira si el evento es de selección, deselección, etc y haz lo que necesites en cada caso.
El método del evento getValueIsAdjusting() te puede indicar si es una ristra de eventos o ya ha terminado, no he probado, pero seguramente puedes ignorar los getValueIsAdjusting() a true.
Saludos.

eduar2083

  • Full Member
  • ***
  • Posts: 102
  • Karma: 0
    • View Profile
Re: mouseClicked en fila de JTable falla ocasionalmente
« Reply #7 on: Noviembre 14, 2017, 11:20:34 pm »
Exacto justo acababa de leer eso del método getValueIsAdjusting(). Este método devolverá true mientras el ratón va bajando como indicador de que la fila aún no ha sido seleccionada definitivamente y cuando el ratón sube el método devuelve false como indicador de que la fila ya ha sido seleccionada definitivamente.
Vaya todo un rollo esto, pero se tiene un control total.

Saludos y gracias.

 

ey