如何使列中的单元格无法选择

时间:2014-04-15 05:19:52

标签: java swing jtable selection

我有一个JTable,其中一些列是不可编辑的。我通过重写isCellEditable方法来做到这一点。我现在想让这些列中的单元格无法选择。如果用户使用tab键遍历单元格,我想集中精力“跳过”这些不可编辑的单元格。你能告诉我这是怎么做到的吗?感谢。

1 个答案:

答案 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);