JSpinner具有DateFormatter删除行为

时间:2014-07-01 15:29:25

标签: java swing date-format jspinner

所以我使用JSpinner.DateEditor创建了一个微调器,并且稍微更改了格式化程序以验证用户输入。

JSpinner sp1 = new JSpinner(sm);
JSpinner.DateEditor de = new JSpinner.DateEditor(sp1, "hh:mm:ss a");

JFormattedTextField ftf = de.getTextField();
DateFormatter formatter = (DateFormatter) ftf.getFormatter();

formatter.setAllowsInvalid(false);
formatter.setOverwriteMode(true);
sp1.setEditor(de);

除了一件事之外它工作得很好。例如,时间是 上午11:32:12

如果我将光标放在32到12之间的冒号之前。我得到了 上午11:02:12

但我想得到 上午11:30:12

对此有何帮助? 感谢

1 个答案:

答案 0 :(得分:1)

根据这个问题的标题和描述的行为,在这一行解释了正在发生的事情:

DateFormatter formatter = (DateFormatter) ftf.getFormatter();

formatter.setAllowsInvalid(false); // here is the key

根据DefaultFormatter#setAllowsInvalid()文档:

  

public void setAllowsInvalid(boolean allowsInvalid)

     

设置是否允许正在编辑的值无效   一段时间(即stringToValue抛出ParseException)。   允许用户临时输入通常很方便   无效的价值。

当您在false中设置此属性时,您不允许用户键入无效值(例如,通过删除某些字符,或者在此特定情况下通过插入一些非数字字符),因此格式化程序正在尝试得到最接近的有效值。

这不是意料之外的行为,但必须与此方法提供的合同保持一致。