Java-EnforceTextFieldFormat-UX-00:00:00;00

Java-EnforceTextFieldFormat-UX-00:00:00;00,java,regex,swing,user-interface,Java,Regex,Swing,User Interface,请参阅我当前应用程序的UI的下图 目前,我正在后端强制执行文本字段的数据格式。如果正则表达式不匹配(00:00:00;00),它将抛出一个错误 我的问题是,从用户体验的角度来看,是否可以使文本框的输入不需要用户输入“:;”就可以使用角色?我正在尝试实现功能,这样他们就可以在框中键入10002000,并在框架上直观地格式化为(10:00:20;00) GUI.java 请让我知道,如果有任何建议,从哪里开始,或者如果有一个特定的对象,我应该使用,而不是TextField 谢谢,如何将JForma

请参阅我当前应用程序的UI的下图

目前,我正在后端强制执行文本字段的数据格式。如果正则表达式不匹配(00:00:00;00),它将抛出一个错误

我的问题是,从用户体验的角度来看,是否可以使文本框的输入不需要用户输入“:;”就可以使用角色?我正在尝试实现功能,这样他们就可以在框中键入10002000,并在框架上直观地格式化为(10:00:20;00)

GUI.java 请让我知道,如果有任何建议,从哪里开始,或者如果有一个特定的对象,我应该使用,而不是TextField


谢谢,

如何将
JFormattedTextField
MaskFormatter
一起使用

JFormattedTextField formattedTextField = new JFormattedTextField();     
try {
    MaskFormatter maskFormatter = new MaskFormatter("##:##:##;##");
    maskFormatter.setPlaceholderCharacter('0');
    maskFormatter.install(formattedTextField);
} catch (ParseException e) {
    e.printStackTrace();
}
更多信息请访问

演示代码:

JFrame frame = new JFrame("");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();

JFormattedTextField field1 = new JFormattedTextField();
field1.setColumns(10);
JFormattedTextField field2 = new JFormattedTextField();
field2.setColumns(10);
try {
    MaskFormatter mask1 = new MaskFormatter("##:##:##;##");
    mask1.setPlaceholderCharacter('0');
    mask1.install(field1);

    MaskFormatter mask2 = new MaskFormatter("##:##:##;##");
    mask2.setPlaceholderCharacter('0');
    mask2.install(field2);
} catch (ParseException e) {
    e.printStackTrace();
}
panel.add(field1);
panel.add(field2);

frame.add(panel);
frame.pack();
frame.setVisible(true);

感谢您的回复,我将在完成其他项目后处理建议的对象。再次感谢maskFormatter是否存在已知的一致性问题?当我为我的2个字段测试实现时,我发现它工作得很好,但能够欺骗它并删除掩码几次。实际上,现在我也测试了这个解决方案,似乎当我第二次专注于字段时,我可以设置任何我想要的。。。这似乎不对。@Busturdust我不确定是什么导致了这个错误,但在使用
maskFormatter.setPlaceholderCharacter('0')之后带有
新JFormattedTextField()而不是新的JFormattedTextField(“00:00:00;00”)
似乎解决了这个问题(至少我无法设置其他格式,然后用这个新设置指定)。@Busterdust从我看来,你可以简单地使用
formattedTextField.setText(“12:34:56;78”)
上安装
MaskFormatter之后。
JFrame frame = new JFrame("");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();

JFormattedTextField field1 = new JFormattedTextField();
field1.setColumns(10);
JFormattedTextField field2 = new JFormattedTextField();
field2.setColumns(10);
try {
    MaskFormatter mask1 = new MaskFormatter("##:##:##;##");
    mask1.setPlaceholderCharacter('0');
    mask1.install(field1);

    MaskFormatter mask2 = new MaskFormatter("##:##:##;##");
    mask2.setPlaceholderCharacter('0');
    mask2.install(field2);
} catch (ParseException e) {
    e.printStackTrace();
}
panel.add(field1);
panel.add(field2);

frame.add(panel);
frame.pack();
frame.setVisible(true);