Eu fiz um teste aqui, e reparei o seguinte. As classes do swing que ficam por trás da gerência de foco, de fato, acessam duas vezes o nosso Traversal quando mudamos o foco. Pelo que percebi, sempre que vc vai “pra frente” no ciclo, ele acessa getComponentAfter e getFirstComponent. Quando vai “pra trás”, getComponentBefore e getLastComponent. Provavelmente faz isso pra manter algum tipo de controle na gerência do foco
Sim, isso mesmo… se bem que não era bem esse o meu problema…
O acesso duplo a que eu me referia era durante a troca de aba de um JTabbedPanel. Eu fiz uma classe MyTraversalPolicy e por algum motivo, quando o foco saia do último componente da primeira aba pra ir para o primeiro da segunda a minha classe era chamada cerca de 3 vezes!
Mas já consegui acertar (depois de muito apanhar, mas consegui). O fato é que durante a troca de abas além de fazer oque vc já falou, o dito cujo passava o foco por um panel que eu tenho em cada aba. Isso ferrava uns controles pra saber onde jogar o foco que eu tenho, então não ficava tão óbvio que era isso que estava acontecendo. Demorou pra eu entender e tb. tive outros problemas, mas enfim está funcionando…