输入验证器单元格编辑器



我有一个表,其中一列包含货币金额。困难在于每一行可以有不同的货币。我已经设置了一个默认的单元格编辑器,它在stopCellEditing中进行验证,效果很好。如果数据无效,编辑器不会停止,而是将值恢复为其原始值,而不是将无效数据留在单元格中。我设置了焦点丢失行为:

ftf.setFocusLostBehavior(JFormatedTextField.PERIST);

我看过单元格编辑器的例子(请参阅指定格式化程序和使用格式化程序工厂),它之所以有效,是因为它使用了整数格式:

       //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);

此格式工厂在JFormatedTextField中设置isEditValid=false,因此当调用stopCellEditing时,它已经将isEditValid设置为false。对于我的表,我不能使用格式化程序,所以一旦它到达stopCellEditor,isEditValid就为true。我能看到的唯一方法是在字段上使用InputVerifier。

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

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

我希望这是有道理的。

问题是在验证FormattedTextString时,我使用了getValue而不是getText。在输入新数据之前,将值设置为原始值。文本设置为新值。一旦改变了这一点,它就按预期行事。

对于将来的引用,在进行单元格处理之前,不会调用表中FormattedTextField上的InputVerifier,因此它不能用于表单元格验证。

最新更新