Hallo zusammen.
Ich habe ein Verständnisproblem was die voreingestellten Tastenkombis für Selektion und Fokus in einer JTable betrifft.
Das Standardverhalten ist in Kürze:
- Tab (bwz. Shift+Tab) setzt den Fokus eine Zelle weiter (zurück) und am Ende der Zeile in die nächste (vorherige) Zeile
- Pfeiltasten navigieren den Fokus entsprechend ihrer Richtung
- Enter setzt die Selektion auf die nächste Zeile und der Fokus bliebt in der Spalte
(Windows NT und JDK 1.6.11)
Was ich im Grunde erreichen möchte, ist dass die JTable nicht mehr auf Enter reagiert, da das in meiner Anwendung anderweitig belegt sein soll. So aber schluckt die Tabelle das Enter-Drücken.
Mein erster Ansatz war die Methode
. Eine Testausgabe dieser Tastenkombis zeigte, dass diese Mengen aber ziemlich leer sind, daher wunderte es mich auch nicht, dass
(...wie in der JComponent-API beschrieben), reichlich wenig Effekt hat.
Mein zweiter Ansatz ging über die InputMap der Tabelle. Auch hier haben Testausgaben gezeigt, dass
als einige Map wirklich gefüllt ist (im Gegesatz zu [c]JComponent.WHEN_IN_FOCUSED_WINDOW[/c]).
Ich habe also hier die Enter-Taste herausgenommen:
Mit dem Ergebnis dass sich nichts geändert hat, sprich wenn ich Enter drücke, passiert immernoch das gleiche. Also offenbar findet er
nicht in der InputMap. Wenn ich nämlich
mache, geht es (...also es geht nichts mehr, was aber zu erwarten ist
).
Also ich fasse mal meine Fragen zusammen:
- 1) Wie bekomme ich es hin, dass meine JTable die Enter-Taste ignoriert?
- 2) Kennt fernerhin jemand eine Methode, wie man es schafft, dass der Fokus, wenn er auf der letzten Zelle in der Tabelle steht, und man Tab drückt, er die Tabelle verlässt und auf der GUI weitermacht (zB zum nächsten JTextField unterhalb der Tabelle springt)?
Ich habe ein Verständnisproblem was die voreingestellten Tastenkombis für Selektion und Fokus in einer JTable betrifft.
Das Standardverhalten ist in Kürze:
- Tab (bwz. Shift+Tab) setzt den Fokus eine Zelle weiter (zurück) und am Ende der Zeile in die nächste (vorherige) Zeile
- Pfeiltasten navigieren den Fokus entsprechend ihrer Richtung
- Enter setzt die Selektion auf die nächste Zeile und der Fokus bliebt in der Spalte
(Windows NT und JDK 1.6.11)
Was ich im Grunde erreichen möchte, ist dass die JTable nicht mehr auf Enter reagiert, da das in meiner Anwendung anderweitig belegt sein soll. So aber schluckt die Tabelle das Enter-Drücken.
Mein erster Ansatz war die Methode
Code:
setFocusTraversalKeys()
Java:
myTable.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
// analog bei den anderen KeyboardFocusManager.*
Mein zweiter Ansatz ging über die InputMap der Tabelle. Auch hier haben Testausgaben gezeigt, dass
Java:
InputMap map = myTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
Ich habe also hier die Enter-Taste herausgenommen:
Java:
map.remove( KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
myTable.setInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, map);
Code:
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)
Java:
myTable.setInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, new InputMap());
Also ich fasse mal meine Fragen zusammen:
- 1) Wie bekomme ich es hin, dass meine JTable die Enter-Taste ignoriert?
- 2) Kennt fernerhin jemand eine Methode, wie man es schafft, dass der Fokus, wenn er auf der letzten Zelle in der Tabelle steht, und man Tab drückt, er die Tabelle verlässt und auf der GUI weitermacht (zB zum nächsten JTextField unterhalb der Tabelle springt)?