如何使用代码 运行 在不需要事件的情况下实时更新满足条件(例如按钮)Java

How To Have Code Run For A Real Time Update For Condition Met Without The Need Of An Event(Button For Example) Java

我正在尝试制作一个密码检查器,我正在尝试将一个图标设置为 X,直到用户满足密码长度至少为 8 个字符的条件。我正在尝试为程序 运行ning 设置一个 while 循环,这将依次 运行 另一个 while 循环来更新图标。我这样做是因为希望它始终检查是否满足条件,而不需要用户单击按钮。我已将代码放在 public 表单 PasswordCheckerUI 的 initComponents 中,但是当我在程序上点击 运行 时,它显示 运行ning 但我的 GUI 没有弹出。我将如何更改代码以使其工作(如果需要)或我必须将其移动到哪里?我尝试使用代码创建一个 public static void 并在 initCompnents 中调用它,但它产生了相同的结果。最后,我尝试在 main 方法中调用该方法,但变量不是静态的,因此也不起作用

public class PasswordCheckerUI extends javax.swing.JFrame {

    public PasswordCheckerUI() {
    initComponents();

    while (Thread.currentThread().isAlive()) {
        while (txtPassword.getText().length() < 8) {
            lblMinCharIcon.setIcon(X);

            if (txtPassword.getText().length() >= 8) {
                lblMinCharIcon.setIcon(Check);
            }
        }    

    }    
}

}

Swing 中的事件不仅在用户单击按钮时发生 - 它们一直发生(移动鼠标时、单击时、编辑文本时、...时),因此它们是最好的解决问题的方法。

例如,您可以在 txtPassword 上监听文档更改事件,并根据密码的新长度更改图标:

public class PasswordCheckerUI {
    private JTextField txtPassword;
    private JLabel lblMinCharIcon;

    public PasswordCheckerUI() {
        txtPassword = new JTextField(40);
        txtPassword.getDocument().addDocumentListener(
            new DocumentListener() {
                @Override
                public void insertUpdate(DocumentEvent e) {
                    checkPasswordLen(txtPassword);
                }

                @Override
                public void removeUpdate(DocumentEvent e) {
                    checkPasswordLen(txtPassword);
                }

                @Override
                public void changedUpdate(DocumentEvent e) {
                    checkPasswordLen(txtPassword);
                }
            }
        );
    }

    private void checkPasswordLen(JTextField tf) {
        if (tf.getText().length() < 8) {
            lblMinCharIcon.setIcon(x);
        } else {
            lblMinCharIcon.setIcon(check);
        }
    }
}