JTable's default behavior is changing focus to next cell and I want to force it to move focus to next component (e.g. JTextField) on TAB key pressed.
I overrided isCellEditable
method of DefaultTableModel
to always return false:
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
But it still doesn't change focus to next component!
How should I make JTable
change focus to next component instead of next cell?
If you really want this, you need to change the default behavior of the tables action map.
Then you need a couple of actions to handle the traversal
Another approach would be to disable the underlying
Action
...(haven't tested this)
The benefit of this approach is can enable/disable the behaviour as you need it without needing to maintain a reference to the old
Actions
default (implemented
KeyBinding
forJTable
) is about next cell and from last cell to first,you can to remove KeyBindings by setting to the null value
The shift-/tab keys are used by default for transfering focus between components. JTable explicitly requests to handle the shift-/tab internally (by providing sets of focusTraversalKeys which doesn't include those).
Following the general rule (if there's specilized api available for a task, use that instead of rolling your own), the solution is to set traversal keys to again contain them:
To reset to the standard keyboard bindings (typically TAB and SHIFT+TAB), simply specify
null
for thekeystrokes
parameter toComponent.setFocusTraversalKeys
: