【问题标题】:JTable Edit Cell only on double click and F2 and Not on any key pressJTable仅在双击和F2时编辑单元格,而不是在任何按键上
【发布时间】:2015-02-26 12:36:24
【问题描述】:

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

如果选择了一个单元格并且我开始输入,该单元格将进入编辑模式。 我不想那样。 只有当我按 F2 或双击它时,我才想编辑单元格。

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

我是 Java 新手。请耐心和清​​楚。

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

【问题讨论】:

    标签: java jtable


    【解决方案1】:

    你需要创建自己的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 来检查单元格是否可编辑的所有其他原因。只有当它本身是可编辑的时,我们才会检查我们的条件。

    【讨论】:

    • 如果您使用的是DefaultCellEditor,那么已经可以使用setClickCountToStart(2) 指定您需要双击。您仍然需要添加自己的代码来处理 F2 键,您可以执行类似于此处描述的操作。
    猜你喜欢
    • 2023-01-14
    • 2011-05-28
    • 1970-01-01
    • 2010-11-19
    • 2018-01-28
    • 2016-10-15
    • 1970-01-01
    • 2014-05-08
    • 2014-05-27
    相关资源
    最近更新 更多