Das Standardverhalten von JTable ändert den Fokus auf die nächste Zelle und ich erzwinge, dass der Fokus bei gedrückter TAB-Taste zur nächsten Komponente (z. B. JTextField) verschoben wird.
Ich habe isCellEditable
Methode von DefaultTableModel
überschrieben, um immer false zurückzugeben:
Aber es ändert immer noch nicht den Fokus auf die nächste Komponente!
Wie sollte ich JTable
den Fokus auf die nächste Komponente anstatt auf die nächste Zelle setzen?
Wenn Sie das wirklich wollen, müssen Sie das Standardverhalten der Tabellenaktionskarte ändern.
%Vor%Dann brauchen Sie ein paar Aktionen, um das Traversal zu behandeln
%Vor% Ein anderer Ansatz wäre, die zugrunde liegende Action
... zu deaktivieren.
(habe das nicht getestet)
Der Vorteil dieses Ansatzes besteht darin, dass Sie das Verhalten nach Bedarf aktivieren / deaktivieren können, ohne einen Verweis auf das alte Actions
Die Umschalt- / Tab-Tasten werden standardmäßig verwendet, um den Fokus zwischen den Komponenten zu übertragen. JTable fordert explizit an, das Shift- / Tab intern zu behandeln (indem Sets von focusTraversalKeys bereitgestellt werden, die diese nicht enthalten).
Befolgen Sie die allgemeine Regel (, wenn für eine Aufgabe eine bestimmte API verfügbar ist, verwenden Sie diese, statt Ihre eigene zu rollen), müssen Sie die Traversalschlüssel so festlegen, dass sie wieder enthalten sind:
%Vor% default (implementiert KeyBinding
für JTable
) ist ungefähr die nächste Zelle und von der letzten Zelle bis zur ersten,
Sie können KeyBindings entfernen, indem Sie den Nullwert festlegen
Um auf die Standard-Tastaturbelegungen (normalerweise TAB und UMSCHALT + TAB) zurückzusetzen, geben Sie einfach null
für den Parameter keystrokes
bis Component.setFocusTraversalKeys
:
Tags und Links java swing jtable focus focusmanager