Java 使用选项卡将焦点更改为JTable中的下一个组件
JTable的默认行为是将焦点更改为下一个单元格,我想强制它在按下TAB键时将焦点移动到下一个组件(例如JTextField)。Java 使用选项卡将焦点更改为JTable中的下一个组件,java,swing,focus,jtable,focusmanager,Java,Swing,Focus,Jtable,Focusmanager,JTable的默认行为是将焦点更改为下一个单元格,我想强制它在按下TAB键时将焦点移动到下一个组件(例如JTextField)。 我覆盖了isCellEditable方法的DefaultTableModel以始终返回false: public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } 但它仍然不会将焦点转移到下一个组件 如何使JTable将焦点更改为下一个组件而不是下一个单元格 默认
我覆盖了
isCellEditable
方法的DefaultTableModel
以始终返回false:
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
但它仍然不会将焦点转移到下一个组件如何使
JTable
将焦点更改为下一个组件而不是下一个单元格 - 默认值(为
实现的JTable
)是关于下一个单元格以及从最后一个单元格到第一个单元格KeyBinding
- 你可以
ActionMap am = table.getActionMap();
am.put("selectPreviousColumnCell", new PreviousFocusHandler());
am.put("selectNextColumnCell", new NextFocusHandler());
然后您需要几个操作来处理遍历
public class PreviousFocusHandler extends AbstractAction {
public void actionPerformed(ActionEvent evt) {
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.focusPreviousComponent();
}
}
public class NextFocusHandler extends AbstractAction {
public void actionPerformed(ActionEvent evt) {
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.focusNextComponent();
}
}
另一种方法是禁用底层的操作
ActionMap am = table.getActionMap();
am.get("selectPreviousColumnCell").setEnabled(false);
am.get("selectNextColumnCell").setEnabled(false);
(尚未对此进行测试)
这种方法的好处是可以根据需要启用/禁用行为,而无需维护对旧
操作的引用,默认情况下,shift-/tab键用于在组件之间转移焦点。JTable显式地请求在内部处理shift-/tab(通过提供不包括这些内容的FocusTraversalkey集)
按照一般规则(如果任务有特定的api可用,请使用该api而不是滚动自己的api),解决方案是设置遍历键以再次包含它们:
Set<AWTKeyStroke> forward = new HashSet<AWTKeyStroke>(
table.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
forward.add(KeyStroke.getKeyStroke("TAB"));
table.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forward);
Set<AWTKeyStroke> backward = new HashSet<AWTKeyStroke>(
table.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
backward.add(KeyStroke.getKeyStroke("shift TAB"));
table.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backward);
Set forward=新哈希集(
表.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
add(KeyStroke.getKeyStroke(“TAB”));
表.setFocusTraversalKeys(KeyboardFocusManager.FORWARD\u TRAVERSAL\u KEYS,FORWARD);
向后设置=新哈希集(
表.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
backward.add(击键.getKeyStroke(“shift选项卡”));
表.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD\u遍历键,BACKWARD);
要重置为标准键盘绑定(通常为TAB和SHIFT+TAB),只需为按键
组件的参数指定null
。setFocusTraversalKeys
:
table.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null);
table.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null);
我们是不是在谈论焦点1)在单元之间的JTable内部2)将焦点从JTable移动到(例如)JTextField,反之亦然versa@mKorbel:#2,JTable的默认行为是将焦点更改为下一个单元格,我想强制它在按下TAB键时将焦点移动到下一个组件(例如,JTextField
)。?键盘焦点管理器?我打算提到Componet.transferFocusXXX(),但有4个月的时间来打嗝:PYep,我不知道这件事。