可以在Java(Swing)中注册多个keylistener事件吗?

时间:2014-02-12 05:24:37

标签: java swing exception

我正在尝试将某些文本字段输入数据验证在一系列值范围内。

我的简单GUI中有两个JTextField,并注册了以下内容:

    ID1_Txt_Input.addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent e) {
            JTextField textField = (JTextField) e.getSource();
            String text = validateInput(textField.getText(),1,254);
            textField.setText(text);
         }
        });

    ID2_Txt_Input.addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent e) {
            JTextField textField = (JTextField) e.getSource();
            String text = validateInput(textField.getText(),0,65535);
            textField.setText(text);
         }
        });

然后我有一个简单的验证方法如下:

public String validateInput( String s, int val_min, int val_max )
{
    String output = "";
    int val = 0;
    try {
        val = Integer.parseInt(s);
    }
    catch(NumberFormatException ne) {
        output = "";
    }

    if( val < val_min )
    {
        output = "";
    }
    else if( val > val_max )
    {
        val /= 10;
        output = (String.valueOf(val));
    }
    else{
        output = s;
    }

    return output;
};

我看到的内容:第一个文本字段正确验证,只允许输入1-254之间的数字,并在输入非数字时自动清除。第二个文本字段未正确验证。

我对Java很新,所以如果我在解决这个问题时会出现明显的错误,我会很感激你的建议。

谢谢,

1 个答案:

答案 0 :(得分:3)

哇,作为一个用户,这将是令人难以置信的烦恼。不提,你可能实际上触发了一个突变异常,或者看到你的更新完全被忽略了,更不用说如果有人将文字粘贴到字段中会发生什么......

此类型的实时验证最好通过使用DocumentFilter来完成,这样可以在Document出现之前过滤添加/删除的值

请查看Implementing a DocumentFilter了解详情,MDP's Weblog查看示例