如何刷新JTextField的值以匹配实际值?

时间:2016-10-10 21:30:29

标签: java swing jframe numbers jformattedtextfield

我正在做这个表格,要求姓名,姓氏,性别,身高等...... 我添加了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");

Example

1 个答案:

答案 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);
        }
    }
}