Foco de bloqueio de Java do JComponent

Eu fiz um gui para minha aplicação. O JFrame possui 2 JPanels, painel1 e painel2. panel1 é apenas isso, um JPanel com uma pintura personalizada que repinta a cada 5 ms.

panel2 é minha primeira tentativa de implementação de CardLayout: contém JPanels subPanel1 e subPanel2. subPanel1 contém um JComboBox e é adicionado ao panel2:panel2.add(subPanel1);.

subPanel2 tem o.setLayout(new CardLayout()); comando, e eu adiciono 3 novos JPanels para ele, com o itemListener e todos. Claro que também adiciono:panel2.add(subPanel2);

Agora para o problema: concentrando componentes em Java. Eu tenho conhecimento de métodossetFocusable(boolean) erequestFocus(). Mas eu não posso fazê-los se comportarem de qualquer maneira lógica.

Primeiro, o problema raiz de todos eles: quando a caixa de combinação obtém o foco, não consigo desfocá-la (tentei clicar em todos os lugares com o cursor).

A seguir, os experimentos que realizei:

1) sem nenhum código falando para focar em toda a aplicação, a caixa de combinação começa com o foco, não importa qual painel de pedidos1 e painel2 sejam adicionados ao JFrame.

2) se eu definirpanel1.setFocusable(true); (no seu construtor) vai começar com o foco

3) se eu definirpanel1.setFocusable(false); e também solicitar foco para isso, ele não consegue. (única coisa que funciona como esperado)

4) se eu definir panel2, subPanel1 ou subPanel2 unfocusable individualmente ou em qualquer combinação, eles ainda podem receber foco (a caixa de combinação, ou seja, que é o único componente capaz de registrar o foco).

5) se eu definir a caixa de combinação unfocusable, eu ainda sou capaz de rolar entre as cartas no CardLayout com a caixa 'itemListener, mas o foco não se ater a ele. Na verdade, o painel1 ainda registra as entradas do teclado

Então, eu realmente estou muito confuso sobre a coisa toda 'foco'. Talvez não seja o que eu suponho que seja? O que estou tentando fazer é bloquear completamente toda a interação com o panel2 até que um sinalizador (que é avaliado a cada 5 ms) seja verdadeiro. Estou correto em assumir que, ao contrário do JPanels, o JComboBox automaticamente possui um mousebuttonListener para obter foco quando clicado? se não, então como desativar completamente o JComboBox e todos os componentes que o cartão atual está exibindo? É um comportamento normal que componentes dentro de um componente unfocusable ainda são focalizados?

questionAnswers(2)

yourAnswerToTheQuestion