我正在做这个表格,要求姓名,姓氏,性别,身高等...... 我添加了keyTyped动作处理程序来进行完整性检查,(仅限字母,年龄最大2个数字等)
问题是,跳棋工作,但我在表格中看到的价值与实际值不符,例如我为高度写'1.333'(以米为单位),检查员完成其工作并告诉仅接受1.33。
等值的用户所以我用了
formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4));
如果我在TextField中写入1.333,则存储的实际值为1.33,但1.333保留在TextField中
这就是我试过的
formattedTextField = new JFormattedTextField();
formattedTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent arg0) {
String re1="^([+-]?\\d*\\.?\\d*)$";
System.out.println(formattedTextField.getText().matches(re1));
if(formattedTextField.getText().length() >= 1 && formattedTextField.getText().matches(re1) == true)
{
if(formattedTextField.getText().length() >= 3)
{
final BalloonTip balloonTip = new BalloonTip(
formattedTextField,
new JLabel("<html>Solo se aceptan valores de altura, como 1.66, 1.76, 1.88, etc..</html>"),
style,
BalloonTip.Orientation.LEFT_ABOVE,
BalloonTip.AttachLocation.ALIGNED,
20, 10,
false
);
TimingUtils.showTimedBalloon(balloonTip, 4500);
formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4));
}
}
}
});
contentPane.add(formattedTextField, "cell 2 9,growx,aligny center");
答案 0 :(得分:3)
试试这个: 创建3个全局变量:
private String oldValue;
private final Pattern pattern = Pattern.compile("^\\d+\\.?\\d{0,2}$");
private Matcher matcher;
您需要存储旧值并使用正则表达式来比较新值
formattedTextField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
oldValue = formattedTextField.getText();
}
public void keyReleased(KeyEvent evt) {
matcher = pattern.matcher(formattedTextField.getText());
if(!matcher.matches()){
formattedTextField.setText(oldValue);
}
}
}