Pessoal? alguém já teve um problema do tipo: cursor ficar piscando em mais de um campo ao mesmo tempo? :shock:
No meu caso ocorre o seguinte: Ao dar duplo clique sobre um campo JTextField, é aberto uma JDialog, logo
apos fechar esta, o foco é direcionado novamente para o campo clicado antes de abrir a tela.
Ocorre que após efetuar esta acão, ficam dois campos piscando ao mesmo tempo(Normalmente o primeiro campo
da tela, assim como o campo em que efetuei duplo clique).
Esta situação é meio aleatória, ha casos em que a mesma não ocorre :roll: .
Ao depurar a Classe interna Handler, contida dentro da classe DefaultCaret mais especificamente o método actionPerformed, percebi
que: hora vem um campo, e hora vem o outro, que são justamente os campos que ficam piscando(sei q parece obvio :? ). Porém são
as proprias classes internas do Java que estão chamando o método.
Ao passar sobre o campo utilizando o Tab, o cursor falso, some.
Daniel, eu até faria isso, o problema é que esta situação não é tão comum assim, é bem aleatória, eu teria uma grande quantidade de código para
para postar. Efetuei testes com pequenas implementações a fim de ter um exemplo, porém não consegui reproduzir a situação.
Desta forma gostaria de saber se alguém já teve um problema assim para me dar uma luz, já procurei em diversos foruns
e encontrei alguns bugs antigos do Java datados de 2000, que apresentavam um comportamento semelhante.
Estou pesquisando oque posso estar fazendo de errado. creio que pode ser um invokeLater, ou algo que esta sendo adiado para execução
posterior.
Assim que eu tiver uma resposta também compartilharei.
Esta situação ocorre porque o projeto que estou desenvolvendo é muito grande, por isso não consegui exemplos
pequenos para reprodução da situação.
Também o projeto possui muitos componentes Tables e Containeres e etc… que requerem foco meio que ao mesmo tempo.
Ocorre que o Swing, coloca em fila de espera para execução, um monte de Threads, e depois vai despachando as mesmas
e enquanto ele não terminar de executar tudo, pode amontoar grabFocus() ou requestFocus(), que não tem choro, primeiro
ele tem que terminar tudo para depois executar minha requisição de foco.
:idea: Resolvido paliativamente esta situação, utilizando o Swing SwingUtilities.invokeLater(…);
[quote=alanSoaresCarneiro]
Ao depurar a Classe interna Handler, contida dentro da classe DefaultCaret mais especificamente o método actionPerformed, percebi
que: hora vem um campo, e hora vem o outro.[/quote]
Na verdade seria um bug e não seria , temos muitas requisições de foco por ativações de componentes
e isso acaba sendo enfileirado pelo Swing, que vai despachando aos poucos.
Desta forma, para resolver paliativamente, foi usado um SwingUtilities.invokeLater(…) , com um requestFocus()
dentro.
O Workaround foi feito no lado da aplicação e não a nivel de componente.