Java 掩码JFormattedTextField阻止删除斜杠字符

Java 掩码JFormattedTextField阻止删除斜杠字符,java,swing,date-formatting,jformattedtextfield,Java,Swing,Date Formatting,Jformattedtextfield,我正在创建一个框架,其中JFormattedTextField被MaskFormatter屏蔽: public static void main(String[] args) { DateFormat df = new SimpleDateFormat("dd-mm-yyyy"); JFrame frame = new JFrame(""); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel

我正在创建一个框架,其中JFormattedTextField被MaskFormatter屏蔽:

public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("dd-mm-yyyy");
    JFrame frame = new JFrame("");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    frame.setLayout(new BorderLayout());
    JFormattedTextField tf = new JFormattedTextField(df);
    tf.setColumns(20);
    panel.add(tf);
    try {
        MaskFormatter dateMask = new MaskFormatter("##-##-####");
        dateMask.install(tf);
    } catch (ParseException ex) {
        Logger.getLogger(MaskFormatterTest.class.getName()).log(Level.SEVERE, null, ex);
    }

    frame.add(new JButton(), BorderLayout.LINE_START);

    frame.add(panel, BorderLayout.LINE_END);
    frame.pack();
    frame.setVisible(true);
}
嗯。没关系,但当我删除(用键盘键)我在字段中写的文本时,也会删除斜杠。有什么模式可以阻止它吗?我想删除文本,但斜杠不能删除,如:

写作日期:

"12-12-1212"
删除后:

"  -  -    "

如何删除文本?您使用的是
setText(“”
?你不应该那样做。改用
setValue(null)
。 如果这不是你的问题,请详细说明你正在做什么,以及正在发生什么

编辑:尝试此代码,查看问题是否仍然存在

public class Tester {
  public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("dd/mm/yyyy");
    JFrame frame = new JFrame("");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    frame.setLayout(new BorderLayout());
    JFormattedTextField tf = new JFormattedTextField(df);
    tf.setFocusLostBehavior(JFormattedTextField.COMMIT);
    tf.setColumns(20);
    panel.add(tf);
    try {
      MaskFormatter dateMask = new MaskFormatter("##-##-####");
      dateMask.install(tf);
    } catch (ParseException ex) {
    }

    frame.add(new JButton(), BorderLayout.LINE_START);

    frame.add(panel, BorderLayout.LINE_END);
    frame.pack();
    frame.setVisible(true);
  }
}´
编辑2: 尝试添加 setFocusLostBehavior(JFormattedTextField.COMMIT);
进一步阅读请参见。

如何删除文本?您使用的是
setText(“”
?你不应该那样做。改用
setValue(null)
。 如果这不是你的问题,请详细说明你正在做什么,以及正在发生什么

编辑:尝试此代码,查看问题是否仍然存在

public class Tester {
  public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("dd/mm/yyyy");
    JFrame frame = new JFrame("");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    frame.setLayout(new BorderLayout());
    JFormattedTextField tf = new JFormattedTextField(df);
    tf.setFocusLostBehavior(JFormattedTextField.COMMIT);
    tf.setColumns(20);
    panel.add(tf);
    try {
      MaskFormatter dateMask = new MaskFormatter("##-##-####");
      dateMask.install(tf);
    } catch (ParseException ex) {
    }

    frame.add(new JButton(), BorderLayout.LINE_START);

    frame.add(panel, BorderLayout.LINE_END);
    frame.pack();
    frame.setVisible(true);
  }
}´
编辑2: 尝试添加 setFocusLostBehavior(JFormattedTextField.COMMIT);
进一步阅读请参阅。

如果我尝试一下,这在您的示例中确实有效。
-
字符保持不变。通常JFormattedTextField的行为是这样的,如果给它一个无效的文本,它会以这种方式中断。你能发布你所有的代码吗?这个按钮应该做什么?你在按它吗?如果我这样做,它就会打破这个领域。虽然目前还不确定原因。目前还没有什么,只是一个测试,将来只在屏幕上打印jtextfield。当我不按“tab”键而按它时,该字段将被删除,当我按“tab”键时,正确的日期将保持不变,当我用键盘删除时,该字段中的所有字符(包括斜杠)将被删除。谢谢!没错!我认为setFocusLostBehavior仅在焦点更改时有效,而在删除文本时无效。谢谢已接受;-)如果我尝试一下,这在您的示例中确实有效。
-
字符保持不变。通常JFormattedTextField的行为是这样的,如果给它一个无效的文本,它会以这种方式中断。你能发布你所有的代码吗?这个按钮应该做什么?你在按它吗?如果我这样做,它就会打破这个领域。虽然目前还不确定原因。目前还没有什么,只是一个测试,将来只在屏幕上打印jtextfield。当我不按“tab”键而按它时,该字段将被删除,当我按“tab”键时,正确的日期将保持不变,当我用键盘删除时,该字段中的所有字符(包括斜杠)将被删除。谢谢!没错!我认为setFocusLostBehavior仅在焦点更改时有效,而在删除文本时无效。谢谢已接受;-)