Autor Tema: Colocar escuchador de jTable Java MouseListener evento mouseCLicked hacer click  (Leído 7013 veces)

Loperso

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola, estoy haciendo un programa en el que se debe identificar cuando una fila se seleccione y así muestre un botón, esto lo tengo en el constructor de la vista en el método de ActionListener, por lo que, si no hay un escuchador no va a entrar en ese método, pero no se como hacer que entre en el método cuando selecciono una fila en el jtable, si alguien me puede ayudar,se lo agradecería mucho
« Última modificación: 15 de Junio 2017, 20:07 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Colocar un escuchador de un jtable en java
« Respuesta #1 en: 11 de Mayo 2017, 13:04 »
Solo soy un aprendiz, no soy ningún experto, pero hace poco hice una práctica que quizás te pueda ayudar.

Para "escuchar" a la JTable yo lo que hice fue crear una clase que implementase un MouseListener.

Mira te pongo aquí el código entero de mi clase para explicar un poco, aunque realmente la mayor parte no te interesa.

Código: [Seleccionar]
class EscuchaMouse implements MouseListener
{
@Override
public void mouseClicked(MouseEvent e) {
String dniSeleccionado=null;
int fila = pnAlum.tbAlumnos.rowAtPoint(e.getPoint());
                int columna = tbAlumnos.columnAtPoint(e.getPoint());
                  if (fila > -1)
                dniSeleccionado = String.valueOf(pnAlum.tbAlumnos.getValueAt(fila,3));
       
                if (dniSeleccionado.isEmpty())
                {
                pnNota.setNota(-1);
pnModulos.setModulos(null);
                  }
               else
               {
                pnNota.setNota(extraerMediaNotas(dniSeleccionado));
pnModulos.setModulos(modulosSuspensos(dniSeleccionado));
                }
      }

@Override
public void mouseEntered(MouseEvent arg0) {
}

@Override
public void mouseExited(MouseEvent arg0) {
}

@Override
public void mousePressed(MouseEvent arg0) {
}

@Override
public void mouseReleased(MouseEvent arg0) {
}
}

Al implementar el MouseListener, te obliga a sobreescribir los métodos propios de la clase MouseListener, pero puedes dejar vacíos los que no necesites.
En mi caso solo me interesaba el método correspondiente al evento mouseCLicked, es decir, cuadno se hace click en la tabla.
Cuando este evento ocurre, podemos recoger la fila y/o la columna donde se hizo el click:
Citar
int fila = pnAlum.tbAlumnos.rowAtPoint(e.getPoint());
int columna = tbAlumnos.columnAtPoint(e.getPoint());

Explico que pnAlum es un JPanel, que contiene la JTable tbAlumnos
tbAlumnos tiene los métodos rowAtPoint y columnAtPoint que al pasarle como argumento objeto MouseEvent e invocando a su metodo getPoint(), podemos averiguiar en que fila y columna de la tabla se ha hecho click.

Si el click se ha hecho en un parte de la tabla donde no hay fila (un borde o lo que sea), el e.getPoint() devolvería -1
Si no, devuelve la fila seleccionada, numeradas de 0 a n...

No se si tú necesitas saber que fila se ha seleccionado.
En cualquier caso, si quieres escuchar al JTable necesitas usar el MouseListener

Así que puedes crear una clase como esta, y dentro del metodo mouseClicked escribe lo que quieras que ocurra cuando se haga click en la tabla.

Luego le añades este listener a tu tabla creando una instancia de tu clase y ya está:

Citar
pnAlum.tbAlumnos.addMouseListener(new EscuchaMouse());
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Loperso

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Colocar un escuchador de un jtable en java
« Respuesta #2 en: 16 de Mayo 2017, 02:58 »
Gracias esto me funciona, ahora como puedo saber cuando no hay nada seleccionado.

Estoy haciendo un programa de en el que primero selecciono al profesor, luego me sale un jtable con los horarios del profesor, y al darle click en un horario, me sale otro jtable con sus materias. pero ¿como hago para que cuando se cambie de profesor (Cambian los horarios y se "Des-selecciona" lo que había en el jtable), se quite de nuevo el otro jtable?, osea lo que supongo es que sepa cuando se dejo de seleccionar una casilla.

Agradecería mucho la ayuda.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".