Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有DateFormatter删除行为的JSpinner_Java_Swing_Date Format_Jspinner - Fatal编程技术网

Java 具有DateFormatter删除行为的JSpinner

Java 具有DateFormatter删除行为的JSpinner,java,swing,date-format,jspinner,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.get

因此,我使用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

有什么帮助吗?
谢谢

基于此问题的标题和所描述的行为,发生的情况将在下面一行解释:

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

formatter.setAllowsInvalid(false); // here is the key
根据文件:

public void setAllowsInvalid(布尔allowsInvalid)

设置是否允许正在编辑的值无效 在一段时间内(即,
stringToValue
抛出一个
ParseException
)。 允许用户临时输入 无效值

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


这不是意外行为,但必须与此方法提供的契约保持一致。

没有解决方法,因为这不是错误或问题。事实上,格式化程序实际上处理无效输入是一个很大的优势。也许它不是用更好的方法来做的,但是考虑一下这些情况:A)新手用户可能会用鼠标,而不是键盘来改变旋转器的值。b) 高级用户可能会使用keayboard箭头来更新值,因此很少需要删除任何内容。在这两种情况下,这种行为都是用户可以忍受的@用户2628641