Good Evening, i have a problem in running a progress bar, please check my code and tell me where is the problem:
/**
** @author Islam */
public class Register extends javax.swing.JFrame implements Runnable {
static final int MY_MINIMUM = 0;
static final int MY_MAXIMUM = 100;
private Pattern pattern;
private Matcher matcher;
private static final String EMAIL_PATTERN =
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
boolean isValidPassord = true;
Thread th;
public Register() {
initComponents();
passwordTextF.addKeyListener(new passwordListener());
passwordMeter = new JProgressBar();
passwordMeter.setMinimum(MY_MINIMUM);
passwordMeter.setMaximum(MY_MAXIMUM);
th = new Thread(this);
th.start();
}
public void updateBar(int newValue) {
passwordMeter.setValue(newValue);
passwordMeter.setStringPainted(true);
System.out.println(newValue);
}
public void run() {
for (int i = MY_MINIMUM; i <= MY_MAXIMUM; i++) {
updateBar(i);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(Register.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
class passwordListener implements KeyListener {
public void keyPressed(KeyEvent e) {
passwordLabel.setForeground(Color.BLACK);
}
public void keyReleased(KeyEvent e) {
// Register.this.validatePassword(passwordTextF.getText());
if (!isValidPassord) {
// new PasswordMeterHandler().start();
}
}
public void keyTyped(KeyEvent e) {
}
}
public boolean validateEmail(String mailFromForm) {
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(mailFromForm);
return matcher.matches();
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int i = 0;
this.validateEmail(nameTextF.getText());
this.validatePassword(passwordTextF.getText());
if (!matcher.matches()) {
EMailLabel.setForeground(Color.red);
}
if (!isValidPassord) {
passwordLabel.setForeground(Color.red);
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
}
public static void main(String args[]) {
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Register frame = new Register();
frame.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel EMailLabel;
private javax.swing.JTextField EMailTextF;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.ButtonGroup buttonGroup2;
private javax.swing.JComboBox countryCombo;
private javax.swing.JComboBox genderCombo;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel nameLabel;
private javax.swing.JTextField nameTextF;
private javax.swing.JLabel passwordLabel;
private javax.swing.JProgressBar passwordMeter;
private javax.swing.JPasswordField passwordTextF;
private javax.swing.JLabel strengthLabel;
private javax.swing.JLabel userNameLabel;
private javax.swing.JTextField userNameTextF;
// End of variables declaration
}
Let’s start with the fact that, in your example, the progress bar is never added to anything, then move onto the violation of one of the most important Swing rules – NEVER, EVER create or modify ANY UI element out side of the Event Dispatching Thread.
KeyListeneris not an appropriate method for tracking changes to text components, they do not take into account if the user pastes text into the field.You should use a
DocumentListenerto monitor changes to the underlying document and aDocumentFilterif you want to change the content going into the field…