代码之家  ›  专栏  ›  技术社区  ›  jacknad

如何使JTable单元格默认为覆盖模式

  •  3
  • jacknad  · 技术社区  · 15 年前

    有没有一种方法可以让单元格默认为覆盖模式,而不是IOW,选择单元格的内容,这样,如果用户开始键入旧文本,将被新文本替换,而不必手动删除它?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Emil H    15 年前

    你应该可以通过创建自己的 TableCellEditor ,可以使用 setCellEditor()

        2
  •  3
  •   camickr    15 年前

    你可能会发现 Table Select All Editor 有帮助。

        3
  •  2
  •   dm76    15 年前

    我已经实现了下面的方法[addDeletePreviousOnEditBehavior],效果很好!注意你需要用一些 TableCellEditor . 为此,请添加以下代码:

    JTable table=new JTable();
    JTextField field=new JTextField();
    addDeletePreviousOnEditBehavior(field);
    table.setCellEditor(new DefaultCellEditor(field));
    

    方法是:

    public static void addDeletePreviousOnEditBehavior(final JComponent field) {
    
        field.addFocusListener(new FocusListener() {
    
            @Override
            public void focusGained(FocusEvent fe) {
                field.putClientProperty(DELETE_ON_EDIT, true);
            }
    
            @Override
            public void focusLost(FocusEvent fe) {
            }
        });
    
        field.addKeyListener(new KeyListener() {
    
            @Override
            public void keyTyped(KeyEvent ke) {
            }
    
            @Override
            public void keyPressed(KeyEvent ke) {
                if ((!(ke.isActionKey()
                        || isSpecial(ke.getKeyCode())))
                        && ((Boolean) field.getClientProperty(DELETE_ON_EDIT))) {
                    System.out.println("Key:" + ke.getKeyCode() + "/" + ke.getKeyChar());
                    field.putClientProperty(DELETE_ON_EDIT, false);
                    if (field instanceof JFormattedTextField) {
                        ((JFormattedTextField) field).setValue(null);
                    }
                    if (field instanceof JTextComponent) {
                        ((JTextComponent) field).setText(null);
                    }
    
                }
            }
    
            @Override
            public void keyReleased(KeyEvent ke) {
               // do nothing
            }
        });
    }