尝试创建3x密码检查器(使用按钮和GUI)

时间:2017-05-02 13:00:13

标签: java swing user-interface netbeans

我在创建GUI时遇到了问题。我想创建一个允许用户通过按钮输入密码的程序,在GUI关闭之前需要3次机会。我尝试过几种不同的方法但却无法完全发挥作用。

JTextField1是显示指令的地方。 JTextField2是输入密码的位置(正确的密码应为1234)

第三次输入错误密码后,我希望它关闭。

我认为问题是它使用相同的密码3次并会自动结束,但我不确定如何修复或循环正确,因为我对java和gui的新手。

这是我到目前为止所做的:

    final String PASSWORD = "1234";
    int attempts = 3;
    String password = "";
    while (attempts-- > 0 && !PASSWORD.equals(password)) 
    {
        jTextField1.setText("Enter your password");
        password = jTextField2.getText();
        if (password.equals(PASSWORD)) 
            jTextField1.setText("Welcome ");
        else 
            jTextField1.setText("Incorrect Pin, please try again");
    }

1 个答案:

答案 0 :(得分:2)

考虑以下两行:

jTextField1.setText("Enter your password");
password = jTextField2.getText();

第二行在第一行之后立即执行 。这里没有代码等待用户输入任何内容。

图形用户界面是基于事件的。程序必须根据用户行为响应事件。单个顺序函数无法处理GUI交互。

通过将事件侦听器添加到能够生成某些类型事件的对象来响应Java中的事件。当用户在具有焦点时按Enter键时,JTextField将触发操作事件。 JButtons在激活时触发一个动作事件(用户在其中按下鼠标并释放它,或者用户在有焦点时按空格键)。

您只想添加一次ActionListener,通常是在创建要添加它的组件之后。由于ActionListener是一个单独的方法,因此您需要在实例字段中跟踪attempts

private static final String PASSWORD = "1234";

private int attempts = 3;

// ...

private void buildWindow() {
    // ...

    jTextField2 = new JTextField(20);
    jTextField2.addActionListener(e -> checkPassword());

    // ...
}

private void checkPassword() {
    if (password.equals(PASSWORD)) {
        jTextField1.setText("Welcome ");
    } else if (--attempts > 0) {
        jTextField1.setText("Incorrect Pin, please try again");
    } else {
        System.exit(0);
    }
}