RandPassApplet Javadoc/*
* Copyright (C) 2003-2010 Stephen Ostermiller
* http://ostermiller.org/contact.pl?regarding=Random+Password+Generator+Applet
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* See LICENSE.txt for details.
*/
package com.Ostermiller.util;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* An applet that will let the user generate random passwords.
*
* @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities
* @since ostermillerutils 1.02.00
*/
public class RandPassApplet extends JApplet {
private static final long serialVersionUID = 1838771003552061341L;
private JTextArea display = new JTextArea();
private JButton clearButton = new JButton("Clear");
private JButton generateButton = new JButton("Generate");
private char[] passwordAlphabet = RandPass.NONCONFUSING_ALPHABET;
private JTextField alphabetField = new JTextField(new String(passwordAlphabet));
private char[] passwordFirstAlphabet = new char[0];
private JTextField alphabetFirstField = new JTextField(new String(passwordFirstAlphabet));
private char[] passwordLastAlphabet = new char[0];
private JTextField alphabetLastField = new JTextField(new String(passwordLastAlphabet));
private int passwordLength = 8;
private JTextField passwordLengthField = new JTextField("" + passwordLength);
private RandPass randPass = new RandPass(passwordAlphabet);
private GridLayout preferencesPanelLayout = new GridLayout(4,2);
private JPanel preferencesPanel = new JPanel(preferencesPanelLayout);
/**
* Start the applet (to be called by the applet viewer)
*
* @since ostermillerutils 1.02.00
*/
@Override public void init() {
getContentPane().removeAll();
JMenuBar menuBar = new JMenuBar();
JMenu editMenu = new JMenu("Edit");
editMenu.setMnemonic(KeyEvent.VK_E);
editMenu.getAccessibleContext().setAccessibleDescription(
"Change how passwords are generated."
);
JMenuItem prefsMenuItem = new JMenuItem("Preferences...", KeyEvent.VK_P);
prefsMenuItem.getAccessibleContext().setAccessibleDescription(
"Set password length and content."
);
preferencesPanelLayout.setHgap(5);
Dimension d;
d = passwordLengthField.getPreferredSize();
d.setSize(70, d.getHeight());
passwordLengthField.setPreferredSize(d);
d = alphabetField.getPreferredSize();
d.setSize(70, d.getHeight());
alphabetField.setPreferredSize(d);
d = alphabetFirstField.getPreferredSize();
d.setSize(70, d.getHeight());
alphabetFirstField.setPreferredSize(d);
d = alphabetLastField.getPreferredSize();
d.setSize(70, d.getHeight());
alphabetLastField.setPreferredSize(d);
preferencesPanel.add(new JLabel("Length:"));
preferencesPanel.add(passwordLengthField);
preferencesPanel.add(new JLabel("Alphabet:"));
preferencesPanel.add(alphabetField);
preferencesPanel.add(new JLabel("First Character Alphabet:"));
preferencesPanel.add(alphabetFirstField);
preferencesPanel.add(new JLabel("Last Character Alphabet:"));
preferencesPanel.add(alphabetLastField);
prefsMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
passwordLengthField.setText("" + passwordLength);
alphabetField.setText(new String(passwordAlphabet));
alphabetFirstField.setText(new String(passwordFirstAlphabet));
alphabetLastField.setText(new String(passwordLastAlphabet));
int preferencesResult = JOptionPane.showConfirmDialog(
RandPassApplet.this,
preferencesPanel,
"Preferences",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE
);
if (preferencesResult == JOptionPane.OK_OPTION){
try {
int length = Integer.parseInt(passwordLengthField.getText());
if (length >= 3 && length <=100){
passwordLength = length;
}
} catch (NumberFormatException x){
// Password length could not be set
}
String alphabetString = alphabetField.getText();
passwordAlphabet = new char[alphabetString.length()];
alphabetString.getChars(0, alphabetString.length(), passwordAlphabet, 0);
randPass.setAlphabet(passwordAlphabet);
String alphabetFirstString = alphabetFirstField.getText();
passwordFirstAlphabet = new char[alphabetFirstString.length()];
alphabetFirstString.getChars(0, alphabetFirstString.length(), passwordFirstAlphabet, 0);
randPass.setFirstAlphabet(passwordFirstAlphabet);
String alphabetLastString = alphabetLastField.getText();
passwordLastAlphabet = new char[alphabetLastString.length()];
alphabetLastString.getChars(0, alphabetLastString.length(), passwordLastAlphabet, 0);
randPass.setLastAlphabet(passwordLastAlphabet);
}
}
});
editMenu.add(prefsMenuItem);
menuBar.add(editMenu);
setJMenuBar(menuBar);
display.setEditable(false);
display.setFont(new Font("Monospaced", Font.PLAIN, 12));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(new JScrollPane(display), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout());
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
display.setText("");
}
});
buttonPanel.add(clearButton);
generateButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
display.append(randPass.getPass(passwordLength) + '\n');
}
});
buttonPanel.add(generateButton);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
display.setText(randPass.getPass(passwordLength) + '\n');
}
/**
* Get information such as the name of this applet, the author of
* this applet, and a description of this applet.
*
* @return a string with the information about this applet.
*
* @since ostermillerutils 1.02.00
*/
@Override public String getAppletInfo() {
return (
"Title: Random Password Generator\n" +
"Author: Stephen Ostermiller\n" +
"http://ostermiller.org/contact.pl?regarding=Random+Password+Generator+Applet\n" +
"Generates secure random passwords."
);
}
}