RYN*_*RYN 8 java swing focus jtable focusmanager
JTable的默认行为是将焦点更改为下一个单元格,我想强制它将焦点移动到按下TAB键的下一个组件(例如JTextField).
我overrided isCellEditable的方法DefaultTableModel总是返回false:
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
但它仍然没有改变焦点到下一个组件!
我应该如何将JTable更改重点放在下一个组件而不是下一个组件?
kle*_*tra 12
默认情况下,shift/tab键用于在组件之间传输焦点.JTable显式请求在内部处理shift-/tab(通过提供不包含那些的focusTraversalKeys集合).
遵循一般规则(如果有一个特定的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);
Run Code Online (Sandbox Code Playgroud)
如果您真的想要这个,则需要更改表操作映射的默认行为.
ActionMap am = table.getActionMap();
am.put("selectPreviousColumnCell", new PreviousFocusHandler());
am.put("selectNextColumnCell", new NextFocusHandler());
Run Code Online (Sandbox Code Playgroud)
然后你需要一些动作来处理遍历
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();
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是禁用底层Action...
ActionMap am = table.getActionMap();
am.get("selectPreviousColumnCell").setEnabled(false);
am.get("selectNextColumnCell").setEnabled(false);
Run Code Online (Sandbox Code Playgroud)
(尚未测试过)
这种方法的好处是可以根据需要启用/禁用行为,而无需维护对旧的引用 Actions
| 归档时间: |
|
| 查看次数: |
9494 次 |
| 最近记录: |