/* * Open Source Physics software is free software as described near the bottom of this code file. * * For additional information and documentation on Open Source Physics please see: * <http://www.opensourcephysics.org/> */ package org.opensourcephysics.controls; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; /** * A dialog for verifying passwords with a single public static method verify(). * * @author Douglas Brown * @version 1.0 */ public class Password extends JDialog { // instance fields private JLabel messageLabel; private JPasswordField passwordField; private String password; private boolean pass; /** * Shows a dialog and verifies user entry of the password. * * @param password the password * @param filename the name of the password-protected file (may be null). * @return true if password is null, "", or correctly verified */ public static boolean verify(String password, String fileName) { if((password==null)||password.equals("")) {//$NON-NLS-1$ return true; } Password dialog = new Password(); dialog.password = password; if((fileName==null)||fileName.equals("")) { //$NON-NLS-1$ dialog.messageLabel.setText(ControlsRes.getString("Password.Message.Short")); //$NON-NLS-1$ } else { dialog.messageLabel.setText(ControlsRes.getString("Password.Message.File") //$NON-NLS-1$ +" \""+XML.getName(fileName)+"\"."); //$NON-NLS-1$ //$NON-NLS-2$ } dialog.pack(); // center on screen Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int x = (dim.width-dialog.getBounds().width)/2; int y = (dim.height-dialog.getBounds().height)/2; dialog.setLocation(x, y); dialog.pass = false; dialog.passwordField.setText(""); //$NON-NLS-1$ dialog.setVisible(true); dialog.dispose(); return dialog.pass; } /** * Private constructor. */ private Password() { super((Frame) null, true); // modal with no owner setTitle(ControlsRes.getString("Password.Title")); //$NON-NLS-1$ createGUI(); setResizable(false); passwordField.requestFocusInWindow(); } /** * Creates the visible components. */ private void createGUI() { // create input panel GridBagLayout gridbag = new GridBagLayout(); JPanel inputPanel = new JPanel(gridbag); // create components messageLabel = new JLabel(); JLabel fieldLabel = new JLabel(ControlsRes.getString("Password.Label")); //$NON-NLS-1$ passwordField = new JPasswordField(20); passwordField.setToolTipText(ControlsRes.getString("Password.Tooltip")); //$NON-NLS-1$ passwordField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String input = String.copyValueOf(passwordField.getPassword()); if((password!=null)&&!input.equals(password)) { Toolkit.getDefaultToolkit().beep(); passwordField.setText(""); //$NON-NLS-1$ } else { pass = true; setVisible(false); } } }); passwordField.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ESCAPE) { passwordField.requestFocusInWindow(); setVisible(false); } } }); // create buttons JButton cancelButton = new JButton(ControlsRes.getString("Password.Button.Cancel")); //$NON-NLS-1$ cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { passwordField.requestFocusInWindow(); setVisible(false); } }); JButton okButton = new JButton(ControlsRes.getString("Password.Button.Enter")); //$NON-NLS-1$ okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String input = String.copyValueOf(passwordField.getPassword()); if((password!=null)&&!input.equals(password)) { Toolkit.getDefaultToolkit().beep(); passwordField.setText(""); //$NON-NLS-1$ passwordField.requestFocusInWindow(); } else { pass = true; setVisible(false); } } }); // input panel in center Container contentPane = this.getContentPane(); contentPane.add(inputPanel, BorderLayout.CENTER); GridBagConstraints c = new GridBagConstraints(); // add message to input panel c.insets = new Insets(20, 15, 10, 15); gridbag.setConstraints(messageLabel, c); inputPanel.add(messageLabel); // add label and password field to input panel JPanel entry = new JPanel(); entry.add(fieldLabel); entry.add(passwordField); c.gridy = 1; c.insets = new Insets(0, 10, 10, 10); gridbag.setConstraints(entry, c); inputPanel.add(entry); // button pane at bottom JPanel buttonPane = new JPanel(); contentPane.add(buttonPane, BorderLayout.SOUTH); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 4, 4)); buttonPane.add(Box.createHorizontalGlue()); buttonPane.add(okButton); buttonPane.add(Box.createRigidArea(new Dimension(4, 0))); buttonPane.add(cancelButton); } } /* * Open Source Physics software is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License (GPL) as * published by the Free Software Foundation; either version 2 of the License, * or(at your option) any later version. * * Code that uses any portion of the code in the org.opensourcephysics package * or any subpackage (subdirectory) of this package must must also be be * released under the GNU GPL license. * * This software 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. * * You should have received a copy of the GNU General Public License along with * this; if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston MA 02111-1307 USA or view the license online at * http://www.gnu.org/copyleft/gpl.html * * Copyright (c) 2007 The Open Source Physics project * http://www.opensourcephysics.org */