Java blockiert den Fokus von JComponent
Ich habe eine GUI für meine Anwendung gemacht. Der JFrame verfügt über 2 JPanels, panel1 und panel2. panel1 ist genau das, ein JPanel mit einem benutzerdefinierten Gemälde, das sich alle 5 ms neu malt.
panel2 ist mein erster Versuch einer CardLayout-Implementierung: Es enthält JPanels subPanel1 & subPanel2. subPanel1 enthält eine JComboBox und wird panel2 hinzugefügt:panel2.add(subPanel1);
.
SubPanel2 hat die.setLayout(new CardLayout());
Befehl, und ich füge 3 neue JPanels hinzu, mit passendem itemListener und allem. Natürlich füge ich es auch hinzu:panel2.add(subPanel2);
Nun zum Problem: Komponenten in Java fokussieren. Ich kenne mich mit Methoden aussetFocusable(boolean)
undrequestFocus()
. Aber ich kann sie nicht dazu bringen, sich logisch zu verhalten.
Zunächst das Grundproblem von allen: Wenn die Combobox den Fokus erhält, kann ich sie überhaupt nicht aufheben (versucht, mit dem Cursor überall zu klicken).
Ich habe folgende Experimente durchgeführt:
1) Ohne dass ein Code für den Fokus in der gesamten Anwendung gesprochen wird, beginnt die Combobox mit dem Fokus, unabhängig davon, in welcher Reihenfolge panel1 und panel2 zum JFrame hinzugefügt werden.
2) wenn ich setzepanel1.setFocusable(true);
(In seinem Konstruktor) beginnt es mit dem Fokus
3) wenn ich setzepanel1.setFocusable(false);
und auch darum bitten, sich darauf zu konzentrieren, es versteht es nicht. (Einzige Sache, die wie erwartet funktioniert)
4) Wenn ich panel2, subPanel1 oder subPanel2 einzeln oder in einer beliebigen Kombination nicht fokussierbar mache, können sie weiterhin den Fokus erhalten (die Combobox, dh die einzige Komponente, die den Fokus registrieren kann).
5) Wenn ich die Combobox nicht fokussierbar mache, kann ich immer noch mit der Box 'itemListener' zwischen den Karten im CardLayout scrollen, aber der Fokus bleibt nicht dabei. Tatsächlich registriert panel1 weiterhin Tastatureingaben
Ich bin wirklich sehr verwirrt über die ganze Sache mit dem Fokus. Vielleicht ist es nicht das, was ich annehme? Ich versuche, die gesamte Interaktion mit panel2 zu blockieren, bis ein Flag (das alle 5 ms ausgewertet wird) wahr ist. Stimmt es, dass die JComboBox im Gegensatz zu JPanels automatisch einen mousebuttonListener hat, um beim Klicken den Fokus zu erhalten? Wenn nein, wie kann ich die JComboBox und alle Komponenten, die auf der aktuellen Karte angezeigt werden, vollständig deaktivieren? Ist es normal, dass Komponenten innerhalb einer nicht fokussierbaren Komponente noch fokussierbar sind?