2011-08-20 2 views
2

ログインフォーム用のパスワード強度チェッカーを作成するロジックを開発していますが、私は、Javaを使用していますが、私はこのアプローチを使用しています:のJPasswordFieldからフォーカスが失われたり、キーがJPasswordFieldの中で解放されたとき(これは迅速な応答を提供します)ときパスワードストレングスメーターとしてJProgressBarを使用するには、入力時に色と値を変更する必要があります

  1. 強度計としてJProgressBarのを使用して、それは色が変わります。

  2. スイングワーカーを使用して改善することはできますか?私はそれを使用したことがないので、それが最良の方法なら誰でも助けてくれます。

長い文章で私を許してください。この例ではありません確認する方法について:私はこのケースでSENCEことはありません、それはちょうど約DocumentListener

NOTICEですSwingWorker


This image below shows what I want to achieve

+1

あなたは長時間実行バックグラウンドタスクを持っていない場合、私はSwingWorkerのを使用する必要を見ません。どの方法でもGUIが目に見えるほど遅くなったり凍結したりしますか? –

+0

あなたは正しいです。 –

答えて

3

なし:参照画像の下

パスワードの変更は、JPasswordFieldからの変更をリッスンし、出力をJProgressBar

にリダイレクトするだけですmKorbelとしてではなく、色付き

enter image description hereenter image description hereenter image description here

import java.awt.GridLayout; 
import javax.swing.*; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 

public class TextLabelMirror { 

    private JPanel mainPanel = new JPanel(); 
    private JPasswordField field = new JPasswordField(20); 
    private JLabel label = new JLabel(); 
    private JLabel labelLength = new JLabel(); 
    private JProgressBar progressBar = new JProgressBar(0, 20); 

    public TextLabelMirror() { 
     field.getDocument().addDocumentListener(new DocumentListener() { 

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

      @Override 
      public void insertUpdate(DocumentEvent e) { 
       updateLabel(e); 
      } 

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

      private void updateLabel(DocumentEvent e) { 
       String text = field.getText();//just example getText() is Depreciated !!! 
       label.setText(text); 
       labelLength.setText(" Psw Lenght -> " + text.length()); 
       if (text.length() < 1) { 
        progressBar.setValue(0); 
       } else { 
        progressBar.setValue(text.length()); 
       } 
      } 
     }); 
     mainPanel.setLayout(new GridLayout(4, 0, 10, 0)); 
     mainPanel.add(field); 
     mainPanel.add(label); 
     mainPanel.add(labelLength); 
     mainPanel.add(progressBar); 
    } 

    public JComponent getComponent() { 
     return mainPanel; 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("Password Strength Checker"); 
     frame.getContentPane().add(new TextLabelMirror().getComponent()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+0

私はあなたと同じコードを、フォーカスリスナーと色の変更とともに、同時に作成しました。私はあなたのDocumentListenerがうまく好きです。 1 + –

3

同じ考え:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class PasswordChecker extends JPanel { 
    private static final Color[] PB_COLORS = {Color.red, Color.yellow, Color.green}; 
    private static final int MAX_LENGTH = 15; 
    private JPasswordField pwField1 = new JPasswordField(10); 
    private JPasswordField pwField2 = new JPasswordField(10); 
    private JProgressBar progBar = new JProgressBar(); 
    private int ins = 10; 

    public PasswordChecker() { 
     pwField1.addFocusListener(new FocusAdapter() { 
     public void focusLost(FocusEvent e) { 
      pwField1FocusLost(e); 
     } 
     }); 

     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1.0, 10, 
       GridBagConstraints.WEST, GridBagConstraints.BOTH, 
       new Insets(ins, ins, ins, ins), 0, 0); 
     add(new JLabel("Password"), gbc); 

     gbc = new GridBagConstraints(1, 0, 1, 1, 1.0, 10, 
       GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, 
       new Insets(ins, ins, ins, ins), 0, 0); 
     add(pwField1, gbc); 

     gbc = new GridBagConstraints(0, 1, 1, 1, 1.0, 10, 
       GridBagConstraints.WEST, GridBagConstraints.BOTH, 
       new Insets(ins, ins, ins, ins), 0, 0); 
     add(new JLabel("Confirm Password"), gbc); 

     gbc = new GridBagConstraints(1, 1, 1, 1, 1.0, 10, 
       GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, 
       new Insets(ins, ins, ins, ins), 0, 0); 
     add(pwField2, gbc); 

     gbc = new GridBagConstraints(0, 2, 1, 1, 1.0, 10, 
       GridBagConstraints.WEST, GridBagConstraints.BOTH, 
       new Insets(ins, ins, ins, ins), 0, 0); 
     add(new JLabel("Strength"), gbc); 

     gbc = new GridBagConstraints(1, 2, 1, 1, 1.0, 10, 
       GridBagConstraints.EAST, GridBagConstraints.BOTH, 
       new Insets(ins, ins, ins, ins), 0, 0); 
     add(progBar, gbc); 
    } 

    private void pwField1FocusLost(FocusEvent e) { 
     // simple check, just checks length 
     char[] pw = pwField1.getPassword(); 
     int value = (pw.length * 100)/MAX_LENGTH; 
     value = (value > 100) ? 100 : value; 
     progBar.setValue(value); 

     int colorIndex = (PB_COLORS.length * value)/100; 
     progBar.setForeground(PB_COLORS[colorIndex]); 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("Password Checker"); 
     frame.getContentPane().add(new PasswordChecker()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 
+0

あなたの人が本当に感謝しているのは、GridBag + Colors + ... +1、 – mKorbel

関連する問題