如何使用代码 运行 在不需要事件的情况下实时更新满足条件(例如按钮)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);
}
}
}
我正在尝试制作一个密码检查器,我正在尝试将一个图标设置为 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);
}
}
}