[Schmitzm-commits] r1135 - in trunk: src/schmitzm/swing src/schmitzm/swing/resource/locales src_junit/schmitzm/swing

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Fri Oct 15 00:32:26 CEST 2010


Author: mojays
Date: 2010-10-15 00:32:26 +0200 (Fri, 15 Oct 2010)
New Revision: 1135

Modified:
   trunk/src/schmitzm/swing/ManualInputOption.java
   trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties
   trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle_de.properties
   trunk/src_junit/schmitzm/swing/SwingUtilTest.java
Log:
new ManualInputOption.PasswordViewable

Modified: trunk/src/schmitzm/swing/ManualInputOption.java
===================================================================
--- trunk/src/schmitzm/swing/ManualInputOption.java	2010-10-14 22:02:58 UTC (rev 1134)
+++ trunk/src/schmitzm/swing/ManualInputOption.java	2010-10-14 22:32:26 UTC (rev 1135)
@@ -29,6 +29,13 @@
  ******************************************************************************/
 package schmitzm.swing;
 
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JPasswordField;
 import javax.swing.JTextField;
 
@@ -320,7 +327,7 @@
 
   /**
    * Diese Klasse stellt eine Eingabe-Option dar, in der ein (verdecktes) Passwort
-   * eingegeben werden kann. Zu brachten ist, dass der Rueckgabewert dieser
+   * eingegeben werden kann. Zu beachten ist, dass der Rueckgabewert dieser
    * {@link InputOption} kein {@link String} ist, sondern ein {@code char[]}.
    * @see JPasswordField#getPassword()
    * @see JPasswordField#getText()
@@ -369,7 +376,7 @@
     /**
      * Erzeugt eine neue Instanz von {@link JPasswordField}.
      */
-    protected JTextField createInputComponent() {
+    protected JPasswordField createInputComponent() {
       return new JPasswordField();
     }
 
@@ -389,6 +396,108 @@
     public char[] getValue() {
       return (char[])super.getValue();
     }
+  }
+  
+  /**
+   * Diese Klasse stellt eine Eingabe-Option dar, in der ein (verdecktes) Passwort
+   * eingegeben werden kann. Neben dem Textfeld fuer die Passwort-Eingabe enthaelt
+   * die Eingabe-Option noch eine Checkbox, ueber die das Passwort im Klartext
+   * angezeigt werden kann.<br>
+   * Zu beachten ist, dass der Rueckgabewert dieser
+   * {@link InputOption} kein {@link String} ist, sondern ein {@code char[]}.
+   * @see JPasswordField#getPassword()
+   * @see JPasswordField#getText()
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class PasswordViewable extends Password {
+    private char oldEchoChar = '*';
 
+    /** Container enthaelt das Text-Eingabefeld und die Checkbox, um das 
+     *  Passwort sichtbar zu machen. */
+    protected Container inpCompCont = new Container();
+    /** Der Button fuer die Browse-Aktion. */
+    protected JCheckBox visibleCheckBox = new JCheckBox(SwingUtil.R("ManualInputOption.PasswordVisible.visibility"),false);
+    
+    /**
+     * Erzeugt eine neue Eingabe-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param defValue    Wert der im Textfeld vorgeblendet wird
+     */
+    public PasswordViewable(String label, boolean inputNeeded, String defValue) {
+      super(label,inputNeeded,defValue);
+      
+      visibleCheckBox.addActionListener( new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+          setPasswortVisible( visibleCheckBox.isSelected() );
+        }
+      });
+
+      // Neben dem Eingabefeld noch ein Browse-Button
+      inpCompCont.setLayout( new BorderLayout() );
+      inpCompCont.add(this.inpComp, BorderLayout.CENTER);
+      inpCompCont.add(this.visibleCheckBox, BorderLayout.EAST);
+      // normale Eingabe-Komponente durch Container ersetzen
+      remove(inpComp);
+      add(inpCompCont,BorderLayout.SOUTH);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     */
+    public PasswordViewable(String label, boolean inputNeeded) {
+      this(label,inputNeeded,"");
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend erforderlich
+     * ist.
+     * @param label Beschreibung
+     */
+    public PasswordViewable(String label) {
+      this(label,true,"");
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend erforderlich
+     * ist.
+     * @param label    Beschreibung
+     * @param defValue Wert der im Textfeld vorgeblendet wird
+     */
+    public PasswordViewable(String label, String defValue) {
+      this(label,true,defValue);
+    }
+    
+    /**
+     * Erzeugt eine neue Instanz von {@link JPasswordField}.
+     */
+    protected JPasswordField createInputComponent() {
+      JPasswordField pwField = super.createInputComponent();
+      oldEchoChar = pwField.getEchoChar();
+      return pwField;
+    }
+
+    /**
+     * Sets the passwort (in)visible in the component.
+     */
+    public void setPasswortVisible(boolean visible) {
+      // remember old echo character
+      if ( ((JPasswordField)inpComp).getEchoChar() != 0 )
+        oldEchoChar = ((JPasswordField)inpComp).getEchoChar();
+      ((JPasswordField)inpComp).setEchoChar( visible ? 0 : oldEchoChar );
+      visibleCheckBox.setSelected(visible);
+    }
+
+    /**
+     * Return whether the passwort is (in)visible in the component.
+     */
+    public boolean isPasswortVisible() {
+      return ((JPasswordField)inpComp).getEchoChar() == 0;
+    }
+
   }
+
 }

Modified: trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties
===================================================================
--- trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties	2010-10-14 22:02:58 UTC (rev 1134)
+++ trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties	2010-10-14 22:32:26 UTC (rev 1135)
@@ -93,6 +93,8 @@
 ExceptionDialog.CopyToClipboard=Copy to clipboard
 ExceptionDialog.CopyToConsole=Copy to console
 
+ManualInputOption.PasswordVisible.visibility=visible
+
 OperationTreePanel.OpDesc.and=AND
 OperationTreePanel.OpDesc.or=OR
 OperationTreePanel.OpDesc.not=NOT

Modified: trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle_de.properties
===================================================================
--- trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle_de.properties	2010-10-14 22:02:58 UTC (rev 1134)
+++ trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle_de.properties	2010-10-14 22:32:26 UTC (rev 1135)
@@ -90,6 +90,8 @@
 ExceptionDialog.CopyToClipboard=In die Zwischenablage
 ExceptionDialog.CopyToConsole=Auf Console ausgeben
 
+ManualInputOption.PasswordVisible.visibility=sichtbar
+
 OperationTreePanel.OpDesc.and=UND
 OperationTreePanel.OpDesc.or=ODER
 OperationTreePanel.OpDesc.not=NICHT
@@ -148,7 +150,7 @@
 OperationTreePanel.OpTooltip.ite=Spezifiziert einen logischen Test.
 OperationTreePanel.OpTooltip.regex=Wertet einen regul\u00E4ren Ausdruck auf einem Text aus.
 OperationTreePanel.OpTooltip.substr=Liefert einen Teil-String.
-OperationTreePanel.OpTooltip.split=Liefert das n-te Ergebnis eines Text-Split \u00fcber einem regul\u00E4ren Ausdruck
+OperationTreePanel.OpTooltip.split=Liefert das n-te Ergebnis eines Text-Split \u00FCber einem regul\u00E4ren Ausdruck
 OperationTreePanel.OpTooltip.str2millis=Konvertiert einen Datum-Text in Millisekunden
 OperationTreePanel.OpTooltip.date2millis=Konvertiert ein Datum in Millisekunden
 OperationTreePanel.OpTooltip.millis2str=Konvertiert Millisekunden in einen Datum-Text

Modified: trunk/src_junit/schmitzm/swing/SwingUtilTest.java
===================================================================
--- trunk/src_junit/schmitzm/swing/SwingUtilTest.java	2010-10-14 22:02:58 UTC (rev 1134)
+++ trunk/src_junit/schmitzm/swing/SwingUtilTest.java	2010-10-14 22:32:26 UTC (rev 1135)
@@ -6,6 +6,9 @@
 
 import org.junit.Test;
 
+import schmitzm.swing.ManualInputOption.Password;
+import schmitzm.swing.ManualInputOption.PasswordViewable;
+
 /**
  * Tests for the {@link SwingUtil} class.
  */
@@ -16,10 +19,14 @@
       if ( !TestingUtil.INTERACTIVE )
         return;
       
+      PasswordViewable pwInputOption = new ManualInputOption.PasswordViewable("Ein Passwort","Geheim");
+      pwInputOption.setPasswortVisible(false);
       Object[] values = MultipleOptionPane.showMultipleInputDialog(
             null, 
             "Test Passwort",
-            new ManualInputOption.Password("Ein Passwort","Geheim")
+            pwInputOption,
+            new ManualInputOption.Text("blablabla"),
+            new FileInputOption("Eine Datei eingeben:",false)
       );
       if ( values == null )
         System.out.println("Dialog aborted without passwort.");



More information about the Schmitzm-commits mailing list