wie kann ich abschalten, dass man in einer JTable mit der Tab-Taste von einer Spalte zur nächsten springt ?
Ich habe schon versucht mit removeKeyListeners() alles StandardListener zu entfernen. Brachte aber nichts !
Hintergrund ist, dass ich mit der Tab-Taste von einem GuiFeld zum nächsten springen will. Wenn ich nun aber auf eine JTable springe komme ich mit der Tab-Taste nicht zum nächsten Feld sondern nur zur nächsten Tabellenspalte. Ich will aber mit der Tab-Taste die Tabelle gleich wieder verlassen und zum nächsten Feld springen, das entsprechend der Reihenfolge wie die Elemente auf das Panel gesetzt wurden, an der Reihe ist.
Die einfache Lösung (auch für JTextArea) ist Strg-Tab drücken
Ansonsten ne Idee (nicht probiert!!). Hänge einen eigenen KeyLuistener ran, frage auf TAB, mache was du willst und „kille“ den Event mit consume(). Ist wie gesagt ins blaue hinein…
/**
* Setzt TAB damit es zur nächsten Komponente springt und nicht zu nächsten Zelle. Das gleich mit SHIFT TAB
* nur das zur vorherigen Zelle gesprungen wird.
* @param table Tabelle die betroffen ist.
*/
static private void setTabKeyUsage(final JTable table){
// Neue Bindung erstellen
AbstractAction tabAction = new AbstractAction() {
public void actionPerformed(ActionEvent event) {
table.transferFocus();
}};
String nextActionName = „nextTabAction“ + ++counter;
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(„TAB“), nextActionName);
table.getActionMap().getParent().put(nextActionName, tabAction);
// Nun noch Rückwärts
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).getParent().remove(KeyStroke.getKeyStroke(„shift TAB“));
AbstractAction shifttabAction = new AbstractAction() {
public void actionPerformed(ActionEvent event) {
table.transferFocusBackward();
}};
String prevActionName = „prevTabAction“ + counter;
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(„shift TAB“), prevActionName);
table.getActionMap().getParent().put(prevActionName, shifttabAction);
}
Hinweis: counter ist ein statischer Zähler (Start bei 0) der die Aktionsnamen eindeutig macht wenn man mehrere Tabellen benutzt. Die Eindeutigkeit kann man sicher auch noch eleganter erreichen doch sie ist erforderlich. Die Methode ist teile einer Factorymethode die die Tabellen konstruiert. Der counter ist in der Factory definiert.