Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Loperso en 09 de Mayo 2017, 19:49
-
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
-
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.
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:
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á:
pnAlum.tbAlumnos.addMouseListener(new EscuchaMouse());
-
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.