Java 在jTables中使用TableCellEditor进行输入验证

Java 在jTables中使用TableCellEditor进行输入验证,java,swing,desktop-application,validation,Java,Swing,Desktop Application,Validation,我有一个3列的JTable。列上的一个必须有一个整数值,我必须在单元格失去焦点之前验证输入 我使用了cell editor并重写了stopCellEditing()函数。我已经在stopCellEditing中编写了验证,它确实保持了对单元格的关注,但我的问题是: 该列不能接受多个值(如果我移动到编辑另一个单元格,内容将消失!!) 如果我正在编辑此列中的一个单元格,则无法按enter键 这是我的编辑课: public class MyEditor extends DefaultCellEdi

我有一个3列的JTable。列上的一个必须有一个整数值,我必须在单元格失去焦点之前验证输入

我使用了cell editor并重写了stopCellEditing()函数。我已经在stopCellEditing中编写了验证,它确实保持了对单元格的关注,但我的问题是:

  • 该列不能接受多个值(如果我移动到编辑另一个单元格,内容将消失!!)
  • 如果我正在编辑此列中的一个单元格,则无法按enter键
这是我的编辑课:

public class MyEditor extends DefaultCellEditor implements TableCellEditor {

    public MyEditor() {
        super(new JTextField());
    }

    @Override
    public boolean stopCellEditing() {
        Object obj = delegate.getCellEditorValue();
        if (obj is not an integer) {
            return false;
        }
        return true;
    }
这就是我在我的框架中使用的方式:

studentsTable.getColumnModel().getColumn(2).setCellEditor(新 MyEditor())

请帮帮我:)

列上的一个必须具有整数值

无需为此编写自定义编辑器

您所需要做的就是重写JTable或TableModel的
getColumnClass()
方法,该表将使用提供的整数编辑器

关于您发布的代码:

  • 它不会编译,因为您的if条件无效。我们需要真实的代码,以便能够发现可能的逻辑错误。代码还应以电子邮件的形式发布

  • 不需要引用委托变量。只需直接调用getCellEditor()方法

  • 不知道当我重写stopCellEditing()而不是返回true时是否会产生影响,我使用:

    返回super.stopCellEditing()


  • 当输入无效输入并且用户更改焦点时,期望的行为是什么?还原为旧值,使用默认值,…该条件永远不会为真-从textField返回的值始终只是一个字符串,因此您取消了默认处理的方向,正如@camickr已经指出的那样。他在其他项目中也很在行——如果编辑有效,不调用super显然是错误的,这是听众收到通知的地方——因此显示sscce以寻求帮助:-)。stopCellEditing()中的内容无关紧要,cz即使我删除了刚刚返回true的代码,我也会得到相同的结果。只有当我删除该函数时,一切才恢复正常,当然没有验证@camickr