我有一个JTable,其中一些列是不可编辑的。我通过重写isCellEditable方法来做到这一点。我现在想让这些列中的单元格无法选择。如果用户使用tab键遍历单元格,我想集中精力“跳过”这些不可编辑的单元格。你能告诉我这是怎么做到的吗?感谢。
答案 0 :(得分:3)
所有导航行为都由表的actionMap中注册的操作控制。因此,要做的就是挂钩绑定到tab键的操作,实现一个包装器,根据需要经常调用该操作,并用包装器替换原始操作。
用于跳过不可编辑单元格的原始代码段:
Object actionKey = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.get(KeyStroke.getKeyStroke("TAB"));
final Action traverseAction = table.getActionMap().get(actionKey);
Action wrapper = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
traverseAction.actionPerformed(e);
while(shouldRepeat((JTable) e.getSource())) {
traverseAction.actionPerformed(e);
}
}
private boolean shouldRepeat(JTable source) {
int leadRow = source.getSelectionModel().getLeadSelectionIndex();
int leadColumn = source.getColumnModel().getSelectionModel().getLeadSelectionIndex();
return !source.isCellEditable(leadRow, leadColumn);
}
};
table.getActionMap().put(actionKey, wrapper);