Java 掩码JFormattedTextField阻止删除斜杠字符
我正在创建一个框架,其中JFormattedTextField被MaskFormatter屏蔽: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
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仅在焦点更改时有效,而在删除文本时无效。谢谢已接受;-)