Ich habe eine TabbedPane erstellt.
Jedoch musste ich danach feststellen, dass der KeyListener, den ich auf das ganze Fenster gelegt hatte, nicht mehr funktionierte.
Wieso funktioniert dieser nicht mehr und, noch viel wichtiger, wie kann ich das Problem beheben?
Wenn das TabbedPane das ganze Fenster ausfüllt und auch aktiv ist, reagiert meines Wissens auch nicht der Listener des Fensters, weil der Focus ja auf dem TabbedPane liegt..
setz in diesm Fall mal den Listener auf das TabbedPane..
habs leider nicht getestet.. also probieren..
Wenn ich den KeyListener auf die TabbedPane lege, dann funktioniert es. Allerdings nur solange bis sich (in meinem Tetris-Spiel) der erste Stein gesetzt hat. Danach verliert die Pane scheinbar den Fokus ...
Ich kann natürlich den Fokus bei jedem Stein wieder auf die Pane legen mit
Code:
tabbedPane.requestFocus();
, aber irgendwie erscheint mir diese Lösung nicht richtig und etwas notgedrungen. Wenn ich mir den Code in einigen Monaten noch mal anschaue, werde ich mich wahrscheinlich fragen, warum dieser KeyListener auf der TabbedPane und nicht auf dem Fenster liegt ...
Aber wenn wir davon ausgehen, dass es halt nicht anders geht, wie kann ich verhindern, dass sich bei Druck auf die Pfeiltasten Links und Rechts die Tabs wechseln. Kann man das ausschalten? Denn diese Tasten werden bereits vom KeyListener gebraucht und sollten nicht zu Verwirrung durch eine weitere Aktion führen!
Mal ne Frage: im TabbedPane setzt du doch pro Tab ein Panel oder?
Wenn du diesem den KeyListener übergibst, statt dem Tabbedpane, müssten doch auch die Pfeiltasten wieder frei sein..
dann am Ende der Ablage des Spielsteins panel.requestfocus() und dann müsste es theoretisch funktionieren..
nicht getestet.. also probieren..
Vielen Dank! Funktioniert hervorragend. Und das sogar bei dem Panel, in dem die TabbedPane ist! Super!
Dann hätte ich noch eine andere Frage zur TabbedPane! Kann man einen Default-Tab setzen? Als die Anfangsauswahl des Tabs festlegen, so dass nicht immer der Inhalt des ersten Tabs angezeigt wird, sondern von Anfang an der des zweiten?
myTabbedPane.setSelectedIndex(x) gleich am Anfang
vergiss nicht das erst alle Panels zum TabbedPane hinzugefügt sein müssen bevor du einen speziellen auswählst!!
Java Doc-Ausschnitt
public void setSelectedIndex(int index)
Sets the selected index for this tabbedpane. The index must be a valid tab index or -1, which indicates that no tab should be selected (can also be used when there are no tabs in the tabbedpane). If a -1 value is specified when the tabbedpane contains one or more tabs, then the results will be implementation defined.
Parameters:
index - the index to be selected
Throws:
IndexOutOfBoundsException - if index is out of range (index < -1 || index >= tab count)
See Also:
getSelectedIndex(), SingleSelectionModel.setSelectedIndex(int)