Jtable não está disparando evento de MouseClicked

Boa noite galera, tudo bem com vocês?

Então, meu problema é o seguinte:

Tenho uma Jtable com 5000 linhas, e toda vez que eu clico (seleciono) uma linha, teria que disparar um evento, e assim, chamar meu método.

O evento de Mouse, ele está disparando, digamos que apenas 98% das vezes. Mas porque 98%?

Seguinte:
As vezes quando fico clicando aleatoriamente na table, ela tem um bug, que não dispara o evento de Clicked.
Exemplo: Selecionei a linha 10 e depois a linha 14.
Quando selecionei a 10, disparou o evento, entrou no método e fez o que tinha que fazer, mas quando cliquei na 14, ele não fez nada, não gerou o evento.

IMAGEM DO PROBLEMA

Na imagem acima, como podem ver, a linha selecionada é a que está com código 11 (índice 10), porém, no console ele tá com a referência da última linha que selecionei antes da linha 10.

Como podem ver no console também, cliquei várias vezes, e disparou o evento, mas nesse último clique, não.

Mas isso acontece as vezes, como disse, bem pouco. Alguém já passou por problema parecido?

Obrigado desde já.

Alguém?!

Na vdd isso acontece quando vc muda de registro muito rápido não é?
E não segue um padrão.

Ex: Nem sempre vai ser o 5,10,15, pode ser qualquer registro quando se muda rapidamente.
Isso é um bug.

E se vc guardar em uma variavel o ultimo que foi pego pra fazer uma comparação?

Veja se selecionando devagar ele vai falhar (só um teste)

O correto, como explica o Tutorial da Oracle sobre JTable, é adicionar um ListSelectionListener no SelectionModel do seu JTable:

[code]ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
//Ignora as mensagens de quando a seleção ainda não tiver terminado
if (e.getValueIsAdjusting()) return;

                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                if (!lsm.isSelectionEmpty()) {
                    int selectedRow = lsm.getMinSelectionIndex();
                    System.out.println("Linha " + selectedRow + " selecionada");
                }
            }
        });[/code]

Perceba que o ListSelectionModel também pode te retornar um intervalo de linhas, caso sua tabela permita seleção múltipla.

[quote=marcospaulo.suporte]Na vdd isso acontece quando vc muda de registro muito rápido não é?
E não segue um padrão.

Ex: Nem sempre vai ser o 5,10,15, pode ser qualquer registro quando se muda rapidamente.
Isso é um bug.

E se vc guardar em uma variavel o ultimo que foi pego pra fazer uma comparação?

Veja se selecionando devagar ele vai falhar (só um teste)[/quote]

Cara, exato.
Ele acontece apenas quando fico mudando os registros de maneira rápida. Quando seleciono devagar, ele não falha, sempre executa, entra no método e pega o valor da linha.

[quote=ViniGodoy]O correto, como explica o Tutorial da Oracle sobre JTable, é adicionar um ListSelectionListener no SelectionModel do seu JTable:

[code]ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
//Ignora as mensagens de quando a seleção ainda não tiver terminado
if (e.getValueIsAdjusting()) return;

                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                if (!lsm.isSelectionEmpty()) {
                    int selectedRow = lsm.getMinSelectionIndex();
                    System.out.println("Linha " + selectedRow + " selecionada");
                }
            }
        });[/code]

Perceba que o ListSelectionModel também pode te retornar um intervalo de linhas, caso sua tabela permita seleção múltipla.[/quote]

ViniGodoy, vou tentar fazer como você falou. Volto aqui pra responder depois. Obrigado pela ajuda.

[quote=ViniGodoy]O correto, como explica o Tutorial da Oracle sobre JTable, é adicionar um ListSelectionListener no SelectionModel do seu JTable:

[code]ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
//Ignora as mensagens de quando a seleção ainda não tiver terminado
if (e.getValueIsAdjusting()) return;

                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                if (!lsm.isSelectionEmpty()) {
                    int selectedRow = lsm.getMinSelectionIndex();
                    System.out.println("Linha " + selectedRow + " selecionada");
                }
            }
        });[/code]

Perceba que o ListSelectionModel também pode te retornar um intervalo de linhas, caso sua tabela permita seleção múltipla.[/quote]

VINIGODOY SEU LINDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Resolveu o problema. Tava té desanimado pra programar por causa do “bug”. Mas agora, já tá funcionando certinho. Muito obrigado cara, muito obrigado.

[quote=bomba544]VINIGODOY SEU LINDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Resolveu o problema. Tava té desanimado pra programar por causa do “bug”. Mas agora, já tá funcionando certinho. Muito obrigado cara, muito obrigado.[/quote]

Era só ler o manual. :slight_smile: