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

时间:2016-06-17 05:27:04

标签: java swing jtable jtextfield tablecelleditor

我这里有一个我在stackoverflow中找到的代码,它允许表格自定义单元格编辑器为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();
}

}

这个代码允许我在我想要编辑表格中的单元格时添加JTextField,但我希望为它添加一些代码,但我不确定在哪里放置它们。

我想添加的行为是:

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

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

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

任何人都可以指导我吗?

1 个答案:

答案 0 :(得分:1)

  1.   

    如果用户按下数字键,它将用新值替换旧值。

    如图here所示,您应该使用DefaultCellEditorJTextField作为单元格编辑器。覆盖表的editCellAt()方法并选择编辑器的文本,以便在用户输入时立即替换旧值。

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

    如有必要,请添加DocumentListener以检查单个击键,或添加DocumentFilter以强制执行数字输入。

  2.   

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

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

  3. image