[Schmitzm-commits] r1642 - trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Jul 21 19:20:37 CEST 2011


Author: mojays
Date: 2011-07-21 19:20:36 +0200 (Thu, 21 Jul 2011)
New Revision: 1642

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/DateInputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultiLineTextInputOption.java
Log:
MultiLineTextInputOption splitted in .TextArea and .TextPane
DateInputOption splitted in .DateOnly and .DateTime

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/DateInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/DateInputOption.java	2011-07-21 15:21:44 UTC (rev 1641)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/DateInputOption.java	2011-07-21 17:20:36 UTC (rev 1642)
@@ -1,9 +1,18 @@
 package de.schmitzm.swing.input;
 
+import java.awt.FlowLayout;
 import java.util.Date;
 
+import javax.swing.JComponent;
+import javax.swing.JSpinner;
+import javax.swing.JSpinner.DateEditor;
+import javax.swing.SpinnerDateModel;
+
 import com.toedter.calendar.JDateChooser;
 
+import de.schmitzm.lang.LangUtil;
+import de.schmitzm.swing.JPanel;
+
 /**
  * Diese Klasse stellt eine Eingabe-Option dar, in der ein Datum
  * eingegeben werden kann.
@@ -11,13 +20,21 @@
  *         (University of Bonn/Germany)
  * @version 1.0
  */
-public class DateInputOption extends InputOption<Date>{
+public abstract class DateInputOption extends InputOption<Date>{
 
-  private String formatPattern;
-  private String formatMaskPattern;
-  private Character formatPlaceholder;
+  protected String formatPattern;
+  protected String formatMaskPattern;
+  protected Character formatPlaceholder;
   
   /**
+   * Erzeugt eine neue Eingabe-Option. {@link #init(String, boolean, boolean)}
+   * muss nachtraeglich aufgerufen werden!
+   */
+  protected DateInputOption() {
+    super();
+  }
+
+  /**
    * Erzeugt eine neue Eingabe-Option.
    * 
    * @param label
@@ -39,7 +56,6 @@
       this.formatMaskPattern = formatMaskPattern;
       this.formatPlaceholder = formatPlaceholder;
       init(label, inputNeeded, false);
-      ((JDateChooser)inpComp).setDate(defValue);
   }
 
   /**
@@ -109,47 +125,319 @@
   }
 
   /**
-   * Erzeugt eine neue Instanz von {@link JDateChooser}.
+   * Diese Klasse stellt eine Eingabe-Option dar, in der ein Datum (ohne Zeit)
+   * eingegeben werden kann.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+   *         (University of Bonn/Germany)
+   * @version 1.0
    */
-  @Override
-  protected JDateChooser createInputComponent() {
-    if ( formatMaskPattern != null && formatPlaceholder != null )
-      return new JDateChooser(formatPattern,formatMaskPattern,formatPlaceholder);
-    return new JDateChooser(null,formatPattern);
-  }
+  public static class DateOnly extends DateInputOption{
+    
+    /**
+     * 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
+     * @param formatPattern
+     *            Format fuer das Text-Feld der Komponente
+     * @param formatMaskPattern
+     *            Mask-Pattern, das fuer das Eingabe-Format des {@link JDateChooser} verwendet wird
+     * @param formatPlaceholder
+     *            Placeholder, das fuer das Eingabe-Format des {@link JDateChooser} verwendet wird
+     */
+    public DateOnly(String label, boolean inputNeeded, Date defValue, String formatPattern, String formatMaskPattern, Character formatPlaceholder) {
+        super(label,inputNeeded,defValue,formatPattern,formatMaskPattern,formatPlaceholder);
+        ((JDateChooser)inpComp).setDate(defValue);
+    }
 
-  /**
-   * Liefert die aktuelle Eingabe im {@link JDateChooser}.
-   */
-  @Override
-  protected Date performGetValue() {
-    return ((JDateChooser)inpComp).getDate();
-  }
+    /**
+     * 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
+     * @param formatPattern
+     *            Format fuer das Text-Feld der Komponente
+     */
+    public DateOnly(String label, boolean inputNeeded, Date defValue, String formatPattern) {
+      this(label,inputNeeded,defValue,formatPattern,null,null);
+    }
 
-  /**
-   * Setzt die aktuelle Eingabe im {@link JDateChooser}.
-   * @return immer {@code true}
-   */
-  @Override
-  protected boolean performSetValue(Date newValue) {
-    ((JDateChooser)inpComp).setDate(newValue);    
-    return true;
+    /**
+     * 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 DateOnly(String label, boolean inputNeeded, Date defValue) {
+      this(label,inputNeeded,defValue,null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option.
+     * 
+     * @param label
+     *            Beschreibung
+     * @param inputNeeded
+     *            gibt an, ob eine Eingabe erforderlich ist
+     */
+    public DateOnly(String label, boolean inputNeeded) {
+        this(label, inputNeeded, null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+     * erforderlich ist.
+     * 
+     * @param label
+     *            Beschreibung
+     */
+    public DateOnly(String label) {
+        this(label, true, null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+     * erforderlich ist.
+     * 
+     * @param label
+     *            Beschreibung
+     * @param defValue
+     *            Wert der im Textfeld vorgeblendet wird
+     */
+    public DateOnly(String label, Date defValue) {
+        this(label, true, defValue);
+    }
+
+    /**
+     * Erzeugt eine neue Instanz von {@link JDateChooser}.
+     */
+    @Override
+    protected JDateChooser createInputComponent() {
+      if ( formatMaskPattern != null && formatPlaceholder != null )
+        return new JDateChooser(formatPattern,formatMaskPattern,formatPlaceholder);
+      return new JDateChooser(null,formatPattern);
+    }
+
+    /**
+     * Liefert die aktuelle Eingabe im {@link JDateChooser}.
+     */
+    @Override
+    protected Date performGetValue() {
+      return ((JDateChooser)inpComp).getDate();
+    }
+
+    /**
+     * Setzt die aktuelle Eingabe im {@link JDateChooser}.
+     * @return immer {@code true}
+     */
+    @Override
+    protected boolean performSetValue(Date newValue) {
+      ((JDateChooser)inpComp).setDate(newValue);    
+      return true;
+    }
+
+    /**
+     * Prueft, ob die Eingabe leer ist.
+     */
+    @Override
+    protected boolean performIsInputEmpty() {
+      return ((JDateChooser)inpComp).getDate() == null;
+    }
+
+    /**
+     * Prueft, ob die Eingabe gueltig ist.
+     */
+    @Override
+    protected boolean performIsInputValid() {
+      return ((JDateChooser)inpComp).getDate() != null;
+    }
+
   }
 
+
   /**
-   * Prueft, ob die Eingabe leer ist.
+   * Diese Klasse stellt eine Eingabe-Option dar, in der ein Datum zusammen
+   * mit einer Uhrzeit eingegeben werden kann.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+   *         (University of Bonn/Germany)
+   * @version 1.0
    */
-  @Override
-  protected boolean performIsInputEmpty() {
-    return ((JDateChooser)inpComp).getDate() == null;
-  }
+  public static class DateTime extends DateInputOption{
+    /** Eingabe fuer das Datum */
+    protected JDateChooser dateChooser;
+    /** Eingabe fuer die Uhrzeit */
+    protected JSpinner timeSpinner = null;
+    protected String timeFormatPattern;
+    
+    /**
+     * 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
+     * @param formatPattern
+     *            Format fuer das Text-Feld der Komponente
+     * @param formatMaskPattern
+     *            Mask-Pattern, das fuer das Eingabe-Format des {@link JDateChooser} verwendet wird
+     * @param formatPlaceholder
+     *            Placeholder, das fuer das Eingabe-Format des {@link JDateChooser} verwendet wird
+     * @param timeFormatPattern
+     *            Format fuer die Uhrzeit im {@link JSpinner}
+     */
+    public DateTime(String label, boolean inputNeeded, Date defValue, String formatPattern, String formatMaskPattern, Character formatPlaceholder, String timeFormatPattern) {
+        super();
+        this.formatPattern = formatPattern;
+        this.formatMaskPattern = formatMaskPattern;
+        this.formatPlaceholder = formatPlaceholder;
+        this.timeFormatPattern = timeFormatPattern;
+        init(label, inputNeeded, false);
+        dateChooser.setDate(defValue);
+        timeSpinner.setValue(defValue);
+    }
 
-  /**
-   * Prueft, ob die Eingabe gueltig ist.
-   */
-  @Override
-  protected boolean performIsInputValid() {
-    return ((JDateChooser)inpComp).getDate() != null;
+    /**
+     * 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
+     * @param formatPattern
+     *            Format fuer das Text-Feld der Komponente
+     * @param timeFormatPattern
+     *            Format fuer die Uhrzeit im {@link JSpinner}
+     */
+    public DateTime(String label, boolean inputNeeded, Date defValue, String formatPattern, String timeFormatPattern) {
+      this(label,inputNeeded,defValue,formatPattern,null,null,timeFormatPattern);
+    }
+
+    /**
+     * 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 DateTime(String label, boolean inputNeeded, Date defValue) {
+      this(label,inputNeeded,defValue,null,"HH:mm:ss");
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option.
+     * 
+     * @param label
+     *            Beschreibung
+     * @param inputNeeded
+     *            gibt an, ob eine Eingabe erforderlich ist
+     */
+    public DateTime(String label, boolean inputNeeded) {
+        this(label, inputNeeded, null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+     * erforderlich ist.
+     * 
+     * @param label
+     *            Beschreibung
+     */
+    public DateTime(String label) {
+        this(label, true, null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+     * erforderlich ist.
+     * 
+     * @param label
+     *            Beschreibung
+     * @param defValue
+     *            Wert der im Textfeld vorgeblendet wird
+     */
+    public DateTime(String label, Date defValue) {
+        this(label, true, defValue);
+    }
+
+    /**
+     * Erzeugt ein Panel, mit einem {@link JDateChooser} und einem {@link JSpinner}
+     * fuer die Uhrzeit.
+     */
+    @Override
+    protected JPanel createInputComponent() {
+      // Komponente fuer das Datum
+      if ( formatMaskPattern != null && formatPlaceholder != null )
+        dateChooser = new JDateChooser(formatPattern,formatMaskPattern,formatPlaceholder);
+      else
+        dateChooser = new JDateChooser(null,formatPattern);
+      // Komponente fuer die Uhrzeit
+      SpinnerDateModel model = new SpinnerDateModel();
+      timeSpinner = new JSpinner(model);
+      DateEditor editor = new JSpinner.DateEditor(timeSpinner, timeFormatPattern);
+      timeSpinner.setEditor(editor);
+      
+      // Komponenten in Panel zusammenfassen
+      JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+      panel.add(dateChooser);
+      panel.add(timeSpinner);
+      return panel;
+      
+    }
+
+    /**
+     * Liefert die aktuelle Eingabe im {@link JDateChooser} kombiniert
+     * mit der Uhrzeit aus dem {@link JSpinner}.
+     */
+    @Override
+    protected Date performGetValue() {
+      return LangUtil.combineDate(dateChooser.getDate(), (Date)timeSpinner.getValue());
+    }
+
+    /**
+     * Setzt die aktuelle Eingabe im {@link JDateChooser} und {@link JSpinner}.
+     * @return immer {@code true}
+     */
+    @Override
+    protected boolean performSetValue(Date newValue) {
+      dateChooser.setDate(newValue);
+      timeSpinner.setValue(newValue);
+      return true;
+    }
+
+    /**
+     * Prueft, ob die Eingabe leer ist.
+     */
+    @Override
+    protected boolean performIsInputEmpty() {
+      return dateChooser.getDate() == null || timeSpinner.getValue() == null;
+    }
+
+    /**
+     * Prueft, ob die Eingabe gueltig ist.
+     */
+    @Override
+    protected boolean performIsInputValid() {
+      return dateChooser.getDate() != null && timeSpinner.getValue() != null;
+    }
+
   }
-
 }

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultiLineTextInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultiLineTextInputOption.java	2011-07-21 15:21:44 UTC (rev 1641)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/MultiLineTextInputOption.java	2011-07-21 17:20:36 UTC (rev 1642)
@@ -1,6 +1,10 @@
 package de.schmitzm.swing.input;
 
+import java.awt.Dimension;
+
 import javax.swing.JTextArea;
+import javax.swing.JTextPane;
+import javax.swing.text.JTextComponent;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -11,7 +15,35 @@
  *         (University of Bonn/Germany)
  * @version 1.0
  */
-public class MultiLineTextInputOption extends InputOption<String>{
+public abstract class MultiLineTextInputOption extends InputOption<String>{
+  /** Initiale Hoehe des Textfeldes. */
+  protected int height;
+  /** Initiale Breite des Textfeldes. */
+  protected int width;
+  
+  
+  /**
+   * 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
+   * @param rows
+   *            Anzahl Zeilen fuer das Text-Feld
+   * @param cols
+   *            Anzahl Spalten (Breite in Zeichen) das Text-Feld
+   */
+  public MultiLineTextInputOption(String label, boolean inputNeeded, String defValue, int rows, int cols) {
+      super();
+      this.width = cols;
+      this.height = rows;
+      init(label, inputNeeded, false);
+      ((JTextComponent)inpComp).setText(defValue);
+      
+  }
 
   /**
    * Erzeugt eine neue Eingabe-Option.
@@ -24,8 +56,7 @@
    *            Wert der im Textfeld vorgeblendet wird
    */
   public MultiLineTextInputOption(String label, boolean inputNeeded, String defValue) {
-      super(label, inputNeeded, false);
-      ((JTextArea)inpComp).setText(defValue);
+      this(label, inputNeeded, defValue, 5, 20);
       
   }
 
@@ -53,15 +84,13 @@
   }
 
   /**
-   * Erzeugt eine neue Instanz von {@link JTextArea}.
+   * Erzeugt eine neue Instanz von {@link JTextComponent}.
    */
   @Override
-  protected JTextArea createInputComponent() {
-    return new JTextArea();
-  }
+  protected abstract JTextComponent createInputComponent();
   
   /**
-   * Liefert {@code true}, da die {@link JTextArea} mehr-zeilig
+   * Liefert {@code true}, da die {@link JTextComponent} mehr-zeilig
    * ist.
    */
   public boolean isScrollPaneNeeded() {
@@ -69,20 +98,20 @@
   }
 
   /**
-   * Liefert die aktuelle Eingabe in der {@link JTextArea}.
+   * Liefert die aktuelle Eingabe in der {@link JTextComponent}.
    */
   @Override
   protected String performGetValue() {
-    return ((JTextArea)inpComp).getText();
+    return ((JTextComponent)inpComp).getText();
   }
 
   /**
-   * Setzt die aktuelle Eingabe in der {@link JTextArea}.
+   * Setzt die aktuelle Eingabe in der {@link JTextComponent}.
    * @return immer {@code true}
    */
   @Override
   protected boolean performSetValue(String newValue) {
-    ((JTextArea)inpComp).setText(newValue);    
+    ((JTextComponent)inpComp).setText(newValue);    
     return true;
   }
 
@@ -91,7 +120,7 @@
    */
   @Override
   protected boolean performIsInputEmpty() {
-    return StringUtils.trimToNull(((JTextArea)inpComp).getText()) == null;
+    return StringUtils.trimToNull(((JTextComponent)inpComp).getText()) == null;
   }
 
   /**
@@ -99,7 +128,160 @@
    */
   @Override
   protected boolean performIsInputValid() {
-    return StringUtils.trimToNull(((JTextArea)inpComp).getText()) != null;
+    return StringUtils.trimToNull(((JTextComponent)inpComp).getText()) != null;
   }
 
+  /**
+   * Diese Klasse stellt eine Eingabe-Option in Form einer {@link JTextArea}
+   * dar, in der ein mehr-zeiliger Text eingegeben werden kann.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+   *         (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class TextArea extends MultiLineTextInputOption {
+    
+    /**
+     * 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
+     * @param rows
+     *            Anzahl Zeilen fuer das Text-Feld
+     * @param cols
+     *            Anzahl Spalten (Breite in Zeichen) das Text-Feld
+     */
+    public TextArea(String label, boolean inputNeeded, String defValue, int rows, int cols) {
+        super(label,inputNeeded,defValue,rows,cols);
+        
+    }
+
+    /**
+     * 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 TextArea(String label, boolean inputNeeded, String defValue) {
+        this(label, inputNeeded, defValue, 5, 20);
+        
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option.
+     * 
+     * @param label
+     *            Beschreibung
+     * @param inputNeeded
+     *            gibt an, ob eine Eingabe erforderlich ist
+     */
+    public TextArea(String label, boolean inputNeeded) {
+        this(label, inputNeeded, null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+     * erforderlich ist.
+     * 
+     * @param label
+     *            Beschreibung
+     */
+    public TextArea(String label) {
+        this(label, true, null);
+    }
+
+    /**
+     * Erzeugt eine neue Instanz von {@link JTextArea}.
+     */
+    @Override
+    protected JTextArea createInputComponent() {
+      return new JTextArea(height,width);
+    }
+  }
+
+
+  /**
+   * Diese Klasse stellt eine Eingabe-Option in Form einer {@link JTextPane}
+   * dar, in der ein mehr-zeiliger Text eingegeben werden kann.
+   * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+   *         (University of Bonn/Germany)
+   * @version 1.0
+   */
+  public static class TextPane extends MultiLineTextInputOption {
+    
+    /**
+     * 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
+     * @param height
+     *            Hoehe des Text-Felds
+     * @param width
+     *            Breite des Text-Felds
+     */
+    public TextPane(String label, boolean inputNeeded, String defValue, int height, int width) {
+        super(label,inputNeeded,defValue,height,width);
+        
+    }
+
+    /**
+     * 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 TextPane(String label, boolean inputNeeded, String defValue) {
+        this(label, inputNeeded, defValue, 80, 200);
+        
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option.
+     * 
+     * @param label
+     *            Beschreibung
+     * @param inputNeeded
+     *            gibt an, ob eine Eingabe erforderlich ist
+     */
+    public TextPane(String label, boolean inputNeeded) {
+        this(label, inputNeeded, null);
+    }
+
+    /**
+     * Erzeugt eine neue Eingabe-Option, in der eine Eingabe zwingend
+     * erforderlich ist.
+     * 
+     * @param label
+     *            Beschreibung
+     */
+    public TextPane(String label) {
+        this(label, true, null);
+    }
+
+    /**
+     * Erzeugt eine neue Instanz von {@link JTextArea}.
+     */
+    @Override
+    protected JTextPane createInputComponent() {
+      JTextPane textPane = new JTextPane();
+      textPane.setPreferredSize( new Dimension(width, height) );
+      
+      return textPane;
+    }
+  }
 }



More information about the Schmitzm-commits mailing list