Vielen Dank ihr beiden.
Zur ersten Frage: Natürlich beinhaltet meine Anwendung Panel.
Zum letzten Beitrag: component.setFocusTraversalKeysEnabled(false)
hat leider nichts gebracht.
Aber im Link How to Use the Focus Subsystem (The Java™ Tutorials > Creating a GUI With Swing > Using Other Swing Features) aus der zweiten Antwort fand sich die Lösung. Mit der folgenden Methode, der ich das JDialog-Objekt übergebe, kann ich die Tabulator-Taste selbst zuweisen:
/**
* Löscht in der übergebenen Komponente die normalen Tastenbelegungen (Tabulator und
* Shift-Tabulator) zum Wechseln durch die Gui-Komponenten, die den Focus bekommen können.
*
* Dies wird etwa benötigt, wenn man die Tabulator-Taste in einer Anwendung zu eigenen Zwecken
* nutzen möchte.
*/
public static void setFocusTraversalKeysToEmptySet(Component component) {
Set<AWTKeyStroke> forwardKeys = Collections.emptySet();
Set<AWTKeyStroke> backwardKeys = Collections.emptySet();
component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
component.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys);
}
(Vielleicht würde hier auch ein und das selbe Set ausreichen, das habe ich nicht ausprobiert.)
Das Zuweisen der Taste selbst erfolgt bei mir über ein paar Methoden in unterschiedlichen Klassen auf diese Weise:
-
setKeyBindingTabulator(() -> toOtherSide());
/** Fügt die Tastaturbindung Tabulator hinzu. */
protected void setKeyBindingTabulator(Runnable tabulatorRunnable) {
BindKeysOnRootPane bind = new BindKeysOnRootPane(getRootPane());
bind.setKeyBindingTabulator(tabulatorRunnable);
}
/** Fügt die Tastaturbindung Tabulator hinzu. */
public void setKeyBindingTabulator(Runnable tabulatorRunnable) {
putIntoInputMapWhenInFocusedWindow(KEYSTROKE_TABULATOR, KEYBINDING_TABULATOR);
putIntoActionMapOfRootPane(KEYBINDING_TABULATOR, runnableToAction(tabulatorRunnable));
}
mit
public static final String KEYBINDING_TABULATOR = "TABULATOR";
public static final int KEYEVENT_TABULATOR = KeyEvent.VK_TAB;
public static final KeyStroke KEYSTROKE_TABULATOR = createUnmodifiedKeystroke(KEYEVENT_TABULATOR);
private static KeyStroke createUnmodifiedKeystroke(int keyevent) {
return KeyStroke.getKeyStroke(keyevent, 0);
}
Ich hab das hier nur ergänzt, falls später mal jemand über eine Suche auf diesen Beitrag stößt. Dann kann man sich damit den gesamten benötigten Code zum Setzen einer eigenen Belegung für den Tabulator zusammentragen.