从按钮获取输入并验证其是正确还是错误

时间:2013-07-26 05:13:40

标签: java validation input jframe jbutton

我正在创建一个带引脚功能的ATM机。问题是我希望在用户按下按钮时从按钮获取输入并验证其是正确还是错误。按下按钮时,它会将结果存储在字符串中。然后它将用于验证其是正确还是错误。例如:用户A按下012345.然后将每个号码存储到另一个字符串以进行验证。然后将该字符串与引脚进行比较。

公共课atmMachine:

int numberPinButton = 10;
String pin = "012345";
String zero, one, two, three, four, five, six, seven, eight, nine;

public atmMachine:

panel = new JPanel();
pinButton = new JButton[numberPinButton];
for(int i = 0; i < numberPinButton; i++) {
    pinButton[i] = new JButton("" + i);
    pinButton[i].addActionListener(this);
    panel.add(pinButton[i]);
}
enterButton = new JButton("Enter");
enterButton.addActionListener(this);
panel.add(enterBtn);
panel.setBorder(BorderFactory.createTitledBorder("Enter your pin:"));
add(panel, BorderLayout.WEST);

public void actionPerformed:

public void actionPerformed(ActionEvent event) {
        if(event.getSource() == pinButton[0]) {
            zero = "0";
        } else if(e.getSource() == pinButton[1]) {
            one = "1";
        } else if(e.getSource() == pinButton[2]) {
            two = "2";
        } else if(e.getSource() == pinButton[3]) {
            three = "3";
        } else if(e.getSource() == pinButton[4]) {
            four = "4";;
        } else if(e.getSource() == pinButton[5]) {
            five = "5";
        } else if(e.getSource() == pinButton[6]) {
            six = "6";
        } else if(e.getSource() == pinButton[7]) {
            seven = "7";
        } else if(e.getSource() == pinButton[8]) {
            eight = "8";
        } else if(e.getSource() == pinButton[9]) {
            nine = "9";
        }

        if(e.getSource() == enterBtn) {
            if(???.equals(pin)) {
                System.out.println("Correct");
            } else {
                System.out.println("Wrong");
            }
        }
}

2 个答案:

答案 0 :(得分:1)

有一个实例变量 -

StringBuffer userKeyString = new StringBuffer();

在执行的操作中,按下任意数字按钮 -

userKeyString.append(event.getActionCommand());

执行操作时,如果输入按下 -

if(event.getSource() == enterBtn){

    if(pin.equals(userKeyString.toString()){

        // Correct pin

    } else {

        // Incorrect pin

    }

    userKeyString.setLength(0); // Clear the buffer for next input and validation

} else {

    userKeyString.append(event.getActionCommand());

}

您应该设置按钮的动作命令 -

for(int i = 0; i < numberPinButton; i++) {
    pinButton[i] = new JButton("" + i);
    pinButton[i].setActionCommand(String.valueOf(i));
    pinButton[i].addActionListener(this);
    panel.add(pinButton[i]);
}

答案 1 :(得分:0)

您可以将String pin声明为如下字段:

String pin;

然后在行动中你追加它(伪代码)

actionPerformed(...){
    pin += keyPressed;
    if(pin.length > 5){
        validatePin(pin);
    }
}

这会回答你的问题吗?

但说实话,我建议不要在动作执行方法中进行验证。插入所有数字后,我会尝试验证引脚。这样,您可以节省一点性能,代码将更具可读性。性能不是问题,但这是一个很好的做法,因为你在这里检查引脚6次,而不是只在actionPerformed方法之外检查一次。

像:

for(int i = 0; i < pinLength; i++){
    waitForUserToPressButtonOrTimeout();
    appendToCurrentPin();
}
validatePin();

或者让用户在输入密码后再按下另一个按钮并将验证链接到该按钮。但我认为使用String pin字段并附加到它是你问题的答案。