有没有办法只接受 JTextField
中的数值?有什么特殊的方法吗?
原文由 Johanna 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法只接受 JTextField
中的数值?有什么特殊的方法吗?
原文由 Johanna 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答1.3k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答718 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
由于这个问题经常重复出现,所以我在这个答案上付出了比平时更多的努力。
我投票给
JFormattedTextField
。 IMO 每个 Swing 开发人员都应该在他/她的工具包中拥有该类的改进版本,因为它允许通过正确选择Format
来验证几乎所有你能想到的东西。我已经使用它的示例:String
可能不为空JSpinner
它还允许在输入无效时提供视觉反馈,例如
InputVerifier
就不是这种情况。它仍然允许用户输入任何内容,但该值在无效时根本不会被接受,并且该值永远不会离开 UI。我认为(但同样,这是我的观点)最好允许用户键入无效输入,而只是使用例如 aDocumentFilter
自动删除无效输入。当在文本字段中键入一个字符但它没有出现时,我会怀疑是一个错误。让我用一些代码来说明这一点(实际上是相当多的代码)。首先是小型演示应用程序。此应用程序仅显示数字
JFormattedTextField
。只需使用另一种格式就可以重用该组件进行完全不同的验证。它只显示
ImprovedFormattedTextField
和JButton
仅在输入有效时启用(啊哈,吃那个DocumentFilter
解决方案)。它还显示JTextArea
每次遇到新的有效值时都会打印该值。按下按钮显示值。--- 的代码以及它所依赖的
ParseAllFormat
ImprovedFormattedTextField
可以在下面找到ParseAllFormat
类:可能的改进:
setBackground
不被所有外观所尊重。有时您可以使用setForeground
代替,但即使这样也不能保证所有 L&F 都遵守。因此,对于视觉反馈,最好在字段旁边使用感叹号。缺点是如果您突然添加/删除图标,这可能会弄乱布局Format
的自创建扩展,其中包括有效输入的描述/示例,并将其作为工具提示放在JFormattedTextField
上。