Blokowanie Java skupia się na JComponent

Zrobiłem gui dla mojej aplikacji. JFrame ma 2 JPanels, panel1 i panel2. panel1 to po prostu JPanel z obrazem niestandardowym, który maluje się co 5 ms.

panel2 to moja pierwsza próba implementacji CardLayout: zawiera JPanels subPanel1 i subPanel2. subPanel1 zawiera JComboBox i jest dodawany do panelu2:panel2.add(subPanel1);.

subPanel2 ma.setLayout(new CardLayout()); Polecenie i dodaję do niego 3 nowe JPanels, z odpowiednim itemListener i wszystkim. Oczywiście też to dodam:panel2.add(subPanel2);

Teraz problem: skupienie komponentów w Javie. Mam wiedzę na temat metodsetFocusable(boolean) irequestFocus(). Ale nie mogę zmusić ich do zachowania się w jakikolwiek logiczny sposób.

Po pierwsze, główny problem ich wszystkich: Kiedy combobox pobiera fokus, nie mogę go w ogóle rozogniskować (próbowałem klikać wszędzie kursorem).

Poniżej przedstawiono eksperymenty, które przeprowadziłem:

1) bez użycia kodu do skupienia się w całej aplikacji, combobox zaczyna się od fokusa, bez względu na to, który panel panelu1 i panel2 zostaną dodane do JFrame.

2) jeśli ustawiępanel1.setFocusable(true); (w jego konstruktorze) rozpocznie się od fokusa

3) jeśli ustawiępanel1.setFocusable(false); a także poprosić o skupienie się na tym, nie ma go. (tylko to, co działa zgodnie z oczekiwaniami)

4) jeśli ustawię panel2, subPanel1 lub subPanel2 na nieogniskowane indywidualnie lub w dowolnej kombinacji, mogą nadal otrzymywać fokus (combobox, który jest jedynym składnikiem zdolnym do zarejestrowania fokusa).

5) Jeśli ustawię combobox nieostry, nadal mogę przewijać karty w CardLayout z itemListener box, ale fokus się nie trzyma. W rzeczywistości panel1 nadal rejestruje wejścia klawiatury

Naprawdę jestem bardzo zdezorientowany, jeśli chodzi o całą „fokus”. Może to nie jest to, co zakładam? Próbuję całkowicie zablokować wszystkie interakcje z panelem2, dopóki flaga (która jest oceniana co 5 ms) jest prawdziwa. Czy mam rację zakładając, że w przeciwieństwie do JPanels, JComboBox automatycznie ma mousebuttonListener, aby uzyskać fokus po kliknięciu? jeśli nie, to jak mogę całkowicie wyłączyć JComboBox i wszystkie komponenty, które wyświetla aktualna karta? Czy jest to normalne zachowanie, że komponenty w obrębie nieogniskowanego komponentu są nadal aktywne?

questionAnswers(2)

yourAnswerToTheQuestion