Java 输入验证器单元编辑器

Java 输入验证器单元编辑器,java,swing,jtable,tablecelleditor,inputverifier,Java,Swing,Jtable,Tablecelleditor,Inputverifier,我有一个表,其中一列有货币金额。困难在于每行可以有不同的货币。我已经设置了一个默认的单元格编辑器,它可以在stopCellEditing中执行validaion操作,效果很好。如果数据无效,编辑器不会停止,但会将值还原为其原始值,而不是将无效数据保留在单元格中。我已将焦点设定为: setFocusLostBehavior(JFormattedTextField.PERSIST) 我已经看过单元格编辑器的示例(请参阅),它之所以有效,是因为它使用整数格式: //Set up the

我有一个表,其中一列有货币金额。困难在于每行可以有不同的货币。我已经设置了一个默认的单元格编辑器,它可以在stopCellEditing中执行validaion操作,效果很好。如果数据无效,编辑器不会停止,但会将值还原为其原始值,而不是将无效数据保留在单元格中。我已将焦点设定为:

setFocusLostBehavior(JFormattedTextField.PERSIST)

我已经看过单元格编辑器的示例(请参阅),它之所以有效,是因为它使用整数格式:

       //Set up the editor for the integer cells.
    integerFormat = NumberFormat.getIntegerInstance();
    NumberFormatter intFormatter = new NumberFormatter(integerFormat);
    intFormatter.setFormat(integerFormat);
    intFormatter.setMinimum(minimum);
    intFormatter.setMaximum(maximum);

    ftf.setFormatterFactory(
            new DefaultFormatterFactory(intFormatter));
    ftf.setValue(minimum);
    ftf.setHorizontalAlignment(JTextField.TRAILING);
    ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
此格式工厂在JFormattedTextField内设置isEditValid=false,因此当调用StopCellEdit时,它已将isEditValid设置为false。对于我的表,我不能使用格式化程序,因此isEditValid在到达stopCellEditor后为true。我能看到的唯一方法是在现场使用InputVerifier

问题是:在表单元格上使用InputVerifier是否可行

我希望在格式化程序中重写stringToValue和valueToString,但我无法访问行货币的详细信息,只能访问字符串。使用InputVerifier,我可以访问单元格的原始字段,该字段是添加了货币信息的JFormattedTextField的子类


我希望这是有意义的。

问题是在验证格式化文本字符串时,我使用了getValue而不是getText。值在输入新数据之前设置为原始值。文本设置为新值。一旦这一点被改变,它的行为就如预期的那样


为了将来参考,在单元格处理完成之前,不会调用表中FormattedTextField上的InputVerifier,因此无法将其用于表单元格验证。

尝试使用InputVerifier,超级用户在stopCellEditing(stopCellEditing())后会调用InputVerifier。在此之前,我需要验证字段。可能。不完全是,这一个更深一点。表格单元格定义为字符串,因此在用户键入时没有实际的错误检查。当焦点丢失且调用stopCellEditor方法时,标志isEditValid设置为true。我执行此方法中所需的验证,并在出现错误时返回false。然后,单元格被还原,而不是像我所要求的那样持久化。我想问的是,是否有一种方法可以拦截单元格的编辑,以便将isEditValid设置为false?我可以编写一个自定义格式化程序,但每次按下一个键都会调用它。有什么建议吗?