usar una sirve seleccionar seleccionada que para obtener los getvalueat getselectedrow getrowcount fila evento datos como java event-handling jtable

java - una - Manejo de evento de cambio de selección JTable: encuentre la tabla de origen dinámicamente



jtable java como usar (3)

1) Creo que encontrará que se dispara una vez para deseleccionar la selección anterior y una vez para seleccionar la nueva selección. Si registra los detalles del evento, debería ver exactamente lo que está sucediendo. No recuerdo los detalles, así que quizás esto esté mal. De cualquier manera, debe poder llamar a getValueIsAdjusting () en el evento y solo usar el último en la cadena (es decir, cuando devuelve falso).

2) Normalmente no debería necesitarlo, pero AFAIK la única manera de hacerlo es crear su Oyente específicamente para la tabla (es decir, pasarle la tabla al constructor y recordarlo).

Implementé mi propio controlador de eventos y lo agregué al modelo de selección de la tabla:

table.getSelectionModel().addListSelectionListener(event);

E implementado el método para "evento" (mencionado anteriormente):

public void valueChanged(ListSelectionEvent e) { log.debug("value changed"); }

Lamentablemente, el evento se dispara dos veces si tengo la oportunidad de seleccionar y no parece posible encontrar la tabla asociada, porque e.getSource proporciona javax.swing.DefaultListSelectionModel.

Por lo tanto, mis preguntas son:

1) ¿Por qué dispara dos veces aunque eventListener solo se registra una vez?

2) ¿Cómo puedo encontrar la tabla para la cual se aplica la selección? El DefaultListSelectionModel no parece ofrecer ningún getSource () o similar.

¡Muchas gracias!


Dado que más de una JTable (u otro componente, supongo) pueden compartir el mismo modelo de selección, no tiene sentido pedir la JTable asociada del evento. Esta es la misma razón por la que no puede recuperar una JTable de un TableModel. Como sugiere Draemon, almacene la referencia a JTable en (o haga que sea accesible) su clase de oyentes.


Gracias Draemon ... Funciona bien ...

Nuestro código

vMachinesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent lse) { if (!lse.getValueIsAdjusting()) { System.out.println("Selection Changed"); } } });

Gracias por

Equipo TF