【发布时间】:2018-09-27 23:49:07
【问题描述】:
在 java 中,我正在尝试制作简单的货币转换器,但为此我需要一个文本字段,它可以将输入限制为仅限数字,更重要的是双数字。我尝试使用JFormatedTextField,但它只会在您完成输入并单击其他位置后格式化输入,但我需要在执行时将 TextField 限制为 consume() 每个无效字符输入。
可能的尝试:
使用JFormatedTextField:
JFormatedTextField textField = new JFormatedTextField(new DoubleFormat());
textField.setBounds(190, 49, 146, 33);
frame.getContentPane().add(textField);
textField.setColumns(10);
使用KeyTyped Event:
char c = arg0.getKeyChar();
if(!(Character.isDigit(c) || c == KeyEvent.VK_BACK_SPACE || c== KeyEvent.VK_DELETE)){
arg0.consume();
}
将KeyTyped Event 与正则表达式一起使用:
if(!((textField.getText().toString+arg0.getKeyChar()).matches("[0-9]*(.[0-9]*)?"))){
arg0.consume();
}
第二次和第三次尝试接近,但第二次尝试在点值上失败,第三次尝试总是读取 textField 上的第一个字符,无论它是什么,所以有什么建议吗?我不是很喜欢 JAVA GUI,所以请耐心等待。
【问题讨论】:
-
1) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 对于这项任务,我倾向于使用
JSpinner和SpinnerNumberModel。 -
这是一个简单的编辑文本框,需要提供输入数字,如果我倾向于使用微调器,我该如何提供不同长度的数字?表示 34533434445545345345345.3454543534535345345
标签: java regex swing javax.swing.text