JTable 仅在双击和 F2 时编辑单元格,而不是在任何按键上

JTable Edit Cell only on double click and F2 and Not on any key press

我有一个包含一些可编辑列的 JTable。

如果选中一个单元格并开始键入,该单元格将进入编辑模式。 我不想要那个。 我只想在按 F2 或双击它时编辑单元格。

我找到了一些关于键绑定的帖子,但没有帮助。

我是 Java 的新手。请耐心看清楚。

我注意到的另一件事。如果我通过输入单元格开始编辑,它的行为与我通过 F2 或双击开始编辑单元格时的行为不同。 这是为什么?

您需要创建自己的 TableCellEditor 并覆盖方法 isCellEditable:

public class MyCellEditor extends AbstractCellEditor implements TableCellEditor {

    private static final long serialVersionUID = 1L;

    JTextField textField = new JTextField("");

    @Override
    public boolean isCellEditable(EventObject e) {
        if (super.isCellEditable(e)) {
            if (e instanceof MouseEvent) {
                MouseEvent me = (MouseEvent) e;
                return me.getClickCount() >= 2;
            }
            if (e instanceof KeyEvent) {
                KeyEvent ke = (KeyEvent) e;
                return ke.getKeyCode() == KeyEvent.VK_F2;
            }
        }
        return false;
    }

    @Override
    public Object getCellEditorValue() {
        return this.textField.getText();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        this.textField.setFont(table.getFont());
        this.textField.setText(value.toString());
        return this.textField;
    }
    return false;
}

isCellEditable 中,我首先调用 super.isCellEditable 来检查单元格是否可编辑的所有其他原因。只有它本身是可编辑的,我们才会检查我们的条件。