TableCellEditor:如果按下键,则清除原始文本;如果没有输入则保留值

TableCellEditor: clear original text if key is pressed; retain value if no input was givien

我这里有一段我​​在 Whosebug 中找到的代码,它允许 table 有一个自定义单元格编辑器,如 JTextField

我已经阅读了一些有关单元格编辑器的文章,并且我了解了每个抽象方法的一些行为。

class tableText extends AbstractCellEditor implements TableCellEditor {
JComponent component = new JTextField();

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,int rowIndex, int vColIndex) {
    ((JTextField) component).setText((String) value);
    return component;
}

public Object getCellEditorValue() {
    return ((JTextField) component).getText();
}

}

当我想编辑 table 中的单元格时,此代码允许我添加 JTextField,但我想向其中添加一些代码,但我不确定将它们放在哪里.

我想添加的行为是这样的:

当单击单元格并出现 JTextField 时,如果用户按下数字键,它将用新值替换旧值。

如果单元格的值留空,将保留原始值。

我知道如何制作这些代码,但我不确定将它们放在哪里。

有人可以指导我吗?

  1. If the user pressed a numeric key, it will replace the old value with a new one.

    here 所示,您应该为单元格编辑器使用 DefaultCellEditorJTextField。覆盖 table 的 editCellAt() 方法和 select 编辑器的文本,以便在用户键入时立即替换旧值。

    final Component editor = getEditorComponent();
    …
    ((JTextComponent) editor).selectAll();
    

    如有必要,添加 DocumentListener to examine individual keystrokes or a DocumentFilter 以强制输入数字。

  2. If the cell's value was left blank, the original value will be retained.

    Escape键取消编辑并恢复原值。