【问题标题】:How do I prevent entering '.' character in JFormattedTextField如何防止输入“。” JFormattedTextField 中的字符
【发布时间】:2013-07-02 21:36:29
【问题描述】:

如何防止输入'.' JFormattedTextField 中的字符(或者 JTextField,如果更简单的话)?

【问题讨论】:

  • 对于 JTextField,您可以使用 DocumentFilter,这个站点上有很多这样的例子(有些是我写的)。对于 JFormattedTextField,编写一个不允许 '.' 的格式化程序。您肯定已经查看了本课程的教程,对吧?如果是这样,您尝试过什么,现在效果如何?
  • 不要为此使用 KeyListener,因为这不适用于复制和粘贴以及其他问题。可以在here 找到一个 DocumentFilter 解决方案的示例。
  • 那么哪个是带有 JTextField 的 DocumentFilter 或带有 JFormattedTextField 的 Mask 的最佳解决方案 - 我不清楚如何编写 DocumentFilter 来做我想做的事情。
  • 两者都可以正常工作。有关 DocumentFilter 的示例,请参阅我在上面的链接中提供的链接。

标签: java swing validation jtextfield jformattedtextfield


【解决方案1】:

你也可以写一个简单的监听器:

addKeyListener(new KeyAdapter() { 公共无效keyTyped(KeyEvent e){ if(e.getKeyChar() == '.') { e.消费(); } } });


编辑

正如 cmets 中提到的@HovercraftFullOfEels,您最好使用DocumentFilter,请参阅this answer 以获得良好的解释,并参考the tutorial

编辑 2
你可以试试MaskFormatter

MaskFormatter formatter = new MaskFormatter(/*Check out the link*/);
JFormattedTextField tf = new JFormattedTextField(formatter );

【讨论】:

  • 我确实看过 maskFormatter 但我并没有真正的格式掩码所以忽略了它,我只想忽略一个字符,但发现 setInvalidCharacters() 应该这样做
  • 这不是一个好的答案-1。在这种情况下,需要避免使用 KeyListener,这已在本网站和其他网站上 多次 讨论过。一方面,该解决方案不适用于复制和粘贴,这是一种基本的文本组件功能。我在最初的评论中已经提到了一个更好的解决方案 DocumentFilter。
  • 我已经重新添加了您的 JFormattedTextField 信息,因为它也是有效的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
相关资源
最近更新 更多