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?